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

Linux 为什么需要使用select在服务器中设置客户端套接字fd是非阻塞的?,linux,sockets,select,Linux,Sockets,Select,大家好! 我在实践中对select模型有疑问。书中的一些内容告诉我在select模型中将接收套接字fd设置为非阻塞。我不知道原因。 就我而言,我可以知道客户机套接字fd是否可以通过fd_ISSET(fd_all[I],fd_readable_set)读取。那么为什么我需要将客户机套接字fd设置为非阻塞? 有人告诉我为什么吗?谢谢 有时,套接字在select()确定它是可读的和应用程序实际尝试从中读取之间会发生变化。所以,最安全的方法是让它不阻塞,这样当你试图阅读时就不会被挂起 一种可能发生这种情

大家好! 我在实践中对select模型有疑问。书中的一些内容告诉我在select模型中将接收套接字fd设置为非阻塞。我不知道原因。 就我而言,我可以知道客户机套接字fd是否可以通过fd_ISSET(fd_all[I],fd_readable_set)读取。那么为什么我需要将客户机套接字fd设置为非阻塞?
有人告诉我为什么吗?谢谢

有时,套接字在
select()
确定它是可读的和应用程序实际尝试从中读取之间会发生变化。所以,最安全的方法是让它不阻塞,这样当你试图阅读时就不会被挂起


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

一个完全无用的问题一些书告诉我。什么书?告诉你到底是什么?@EJP,对不起,我没有清楚的描述。不是“某本书”,它是来自web的一些数据。例如:,在多个进程或线程中,一旦选择函数return,所有进程或线程都将收到一些fd_集。是这样吗?是的,如果它们都在等待已变为可读的同一fd。