FD_ISSET 没有调用 `select` 的结果
The result of FD_ISSET without calling `select`
我正在使用书籍 Unix Network Programming
学习套接字编程。以下是本书中的两段代码:
我们可以看到,它在FD_SET
之后调用了FD_ISSET
,而没有调用它们之间的select
函数,结果如何?如果 sockfd
是可写的,它会是 true
吗?
PS: 源代码http://www.masterraghu.com/subjects/np/introduction/unix_network_programming_v1.3/ch16lev1sec2.html
FD_SET
只是在位掩码中设置一个位,FD_ISSET
检查这个位。这些调用不关心这个位是否代表一个文件描述符,它只是一个整数。如果这些调用之间没有任何操作位掩码的内容(即没有调用 select
),那么 FD_ISSET
的结果将准确反映使用 FD_SET
.
设置的内容
两个片段之间少了 30 行,我们怎么知道那里没有调用 select
?
除此之外,select
函数没有做任何特别的事情,它只是从集合中清除描述符。
如果您直接调用 FD_SET(sockfd, &wset)
然后调用 FD_ISSET(sockfd, &wset)
,那么 FD_ISSET
宏将简单地计算为“真”(非零整数值)。
我正在使用书籍 Unix Network Programming
学习套接字编程。以下是本书中的两段代码:
我们可以看到,它在FD_SET
之后调用了FD_ISSET
,而没有调用它们之间的select
函数,结果如何?如果 sockfd
是可写的,它会是 true
吗?
PS: 源代码http://www.masterraghu.com/subjects/np/introduction/unix_network_programming_v1.3/ch16lev1sec2.html
FD_SET
只是在位掩码中设置一个位,FD_ISSET
检查这个位。这些调用不关心这个位是否代表一个文件描述符,它只是一个整数。如果这些调用之间没有任何操作位掩码的内容(即没有调用 select
),那么 FD_ISSET
的结果将准确反映使用 FD_SET
.
两个片段之间少了 30 行,我们怎么知道那里没有调用 select
?
除此之外,select
函数没有做任何特别的事情,它只是从集合中清除描述符。
如果您直接调用 FD_SET(sockfd, &wset)
然后调用 FD_ISSET(sockfd, &wset)
,那么 FD_ISSET
宏将简单地计算为“真”(非零整数值)。