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 宏将简单地计算为“真”(非零整数值)。