为什么需要设置客户端套接字fd在使用select的服务器中是非阻塞的?

时间:2016-08-22 08:15:51

标签: linux sockets select

每个人,你好! 我在实践中对选择模型有疑问。本书的一些内容告诉我在选择模型中设置接收套接字fd到非阻塞。我不知道原因。 就我而言,我可以知道客户端套接字fd是否可被FD_ISSET读取(fd_all [i],fd_readable_set)。那为什么我需要将客户端套接字fd设置为非阻塞? 有谁告诉我为什么?谢谢!

1 个答案:

答案 0 :(得分:1)

有时在select()确定它可读的时间和应用程序实际尝试从中读取的时间之间,套接字发生了变化。因此,最安全的做法是使其无阻塞,以便在尝试阅读时不会挂起。

如果您有多个进程或线程在同一个套接字上调用select(),则可能发生这种情况。当数据到达时,它们都将返回并尝试读取它,但只有第一个会成功。