2013-04-25 59 views
0

select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)手冊頁,它說:讓系統調用`選擇()`阻塞,直到套接字得到的東西讀

If timeout is a null pointer, the select blocks indefinitely. 

是否無限期指具有任意長度的時期?

很好讓線程阻塞在select(),直到套接字獲取一些數據?如果是這樣,那麼*超時應該是什麼?

回答

3

「無限期」不是任意的,它是永遠的。如果timeout指針是NULL,那麼select將永遠阻塞,或者直到其中一個集合中的某個文件描述符「準備就緒」。

+0

謝謝你的回答。你是否介意爲select()提供一些關於'indefinitely = forever'的參考? – GuLearn 2013-04-25 14:12:28

+2

@ user2207811您可以只檢查一本字典,它就是這個詞的意思(「對於無限期或未指定的時間段」)。 – unwind 2013-04-25 14:17:51

+0

@ user2207811來自[The Free Dictionary](http://www.thefreedictionary.com/indefinitely):「沒有任何時間或數量的限制」。換句話說,永遠。 :) – 2013-04-25 14:18:16

0

不,這是不是一個好主意,等待「永遠」...如果你拔掉你的網線,你的應用程序將凍結。你應該設置合理的超時時間(也許幾秒鐘),以便數據永遠不會到達時可以安全地退出。

+1

這取決於你的應用程序在做什麼。一般來說,當在固定時間內沒有收到數據時退出是不好的行爲... – 2013-04-25 14:17:43

+0

如果我拔掉網線,一切都會凍結。因爲該應用程序充當服務器。 – GuLearn 2013-04-25 14:26:13