大家好! 我在实践中对选择模型有疑问。书中的一些内容告诉我有关在选择模型中将接收到的套接字 fd 设置为非阻塞。我不知道原因。 就我而言,我可以通过 FD_ISSET(fd_all[i], fd_read_set) 知道客户端套接字 fd 是否可读。那么为什么我需要将客户端套接字 fd 设置为非阻塞呢? 有人告诉我为什么吗?谢谢!
最佳答案
有时,在 select()
确定套接字可读和应用程序实际尝试从中读取数据之间,套接字会发生变化。因此,最安全的做法是使其成为非阻塞,这样您在尝试读取时就不会被挂起。
发生这种情况的一种可能的方式是,如果您有多个进程或线程都在同一个套接字上调用 select()
。当数据到达时,它们都会返回并尝试读取它,但只有第一个会成功。
关于linux - 为什么需要使用 select 在服务器中设置客户端套接字 fd 是非阻塞的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39074397/