2014-05-22 18 views
2

我正在寫一個延遲非常重要的小型網絡程序。我想捕捉所有可能的情況,在某些系統調用中阻止執行。可以關閉()阻塞執行一段時間?

我知道connect可以阻止執行幾秒鐘。直到數據可用爲止。 write阻塞,直到系統緩衝區中有足夠的空間。問題是:可以close阻止執行一段時間?如果是的話,這是通過使用非阻塞套接字解決?

我正在使用Linux。但是,瞭解其他系統也很有趣。

+0

是的,'close'也可以阻止。如果您不想阻止行爲,請使用非阻塞套接字。適用於所有這些情況。 –

+0

@JoachimPileborg:如果一個非阻塞套接字上的'close'不會阻塞,如果返回零,我能確定連接是否正確關閉? – Marian

+1

好吧,我誤解了close函數爲什麼會阻塞的原因,它與套接字阻塞或非阻塞狀態無關,而是由'SO_LINGER'套接字選項控制。見例如[這舊的SO問題](http://stackoverflow.com/questions/6418277/how-to-close-a-non-blocking-socket)。 –

回答

2

是關閉可以阻止。當在同一個套接字上的recv/send調用中存在另一個線程時,會發生這種情況。

使用非阻塞套接字來避免這種情況。