每个人,你好! 我在实践中对选择模型有疑问。本书的一些内容告诉我在选择模型中设置接收套接字fd到非阻塞。我不知道原因。 就我而言,我可以知道客户端套接字fd是否可被FD_ISSET读取(fd_all [i],fd_readable_set)。那为什么我需要将客户端套接字fd设置为非阻塞? 有谁告诉我为什么?谢谢!
答案 0 :(得分:1)
有时在select()
确定它可读的时间和应用程序实际尝试从中读取的时间之间,套接字发生了变化。因此,最安全的做法是使其无阻塞,以便在尝试阅读时不会挂起。
如果您有多个进程或线程在同一个套接字上调用select()
,则可能发生这种情况。当数据到达时,它们都将返回并尝试读取它,但只有第一个会成功。