2016-08-22 28 views
-1

大家好,你好! 我在实践中有关于选择模型的问题。本书的一些内容告诉我关于在选择模型中设置了无阻塞的套接字fd。我不知道原因。 就我而言,我可以知道客户端套接字fd是否可以通过FD_ISSET(fd_all [i],fd_readable_set)读取。所以,为什么我需要将客户端套接字fd设置为非阻塞? 有人告诉我为什么吗?谢谢!为什么需要设置客户端套接字fd在服务器上使用select进行非阻塞?

+0

一个完全没用的问题。 '有人告诉我'。什么书?告诉你*究竟是什么? – EJP

+0

@ EJP,对不起,我没有一个清晰的描述。没有“某本书”,它是来自网络的一些数据。例如: http://www.cnblogs.com/zhuyp1015/archive/2012/05/31/2529203.html https://segmentfault.com/a/1190000003063859 –

回答

1

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

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

+0

,在多个进程或线程中,一旦select函数返回所有进程或者threas都会收到一些fd_set.Is那么? –

+0

是的,如果他们都在等待可读的同一个FD。 – Barmar

+0

好的,我明白了,谢谢! –

相关问题