2016-09-22 38 views
0

當我連接到一個Unix命名套接字,在哪些條件下我可能會收到ETIMEDOUT?當套接字超時發生? (Unix)

如果當在N秒的服務器不接受()它發生了,那麼是什麼在Linux上典型的N +

+0

我懷疑你會在'accept()'上看到這個。你可以在'send()'或'recv()'和朋友看到它。 – EJP

回答

1

它發生,如果服務器的操作系統不接受N秒內的連接。調用accept()的服務器應用程序通常不相關,因爲操作系統會自動執行三次握手,而不管應用程序是否調用accept(); TCP堆棧將掛起的連接排隊,直到應用程序執行此操作(達到備份限制)。

如果服務器是物理狀態爲關閉或出現在網絡上的通信錯誤,所以通常只出現超時。

我認爲Linux上的默認值是20秒。

+0

你真的可以在'accept()'看到這個嗎?當然,TCP會默默地放棄不完整的連接? – EJP

+0

直到堆棧完成3次握手之後,連接纔會變爲可用於'accept()'。 – Barmar