2016-08-22 38 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

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

相關問題