簡體   English   中英

TCP CLOSE_WAIT狀態..&新的連接

[英]TCP CLOSE_WAIT state.. & new connection

我在一個眾所周知的TCP端口上有一台服務器,一堆客戶端連接到該端口。 客戶端使用非阻塞選項連接到服務器。

當我終止服務器進程時,客戶端套接字將進入CLOSE_WAIT狀態。 現在,如果我重新啟動服務器進程,並且客戶端嘗試再次連接,則connect()調用似乎被阻止,即使它應該是非阻止的。

實際的解決方法實際上是在服務器死機時關閉套接字。 但我正在嘗試了解當前行為。

  • 當現有連接處於CLOSE_WAIT中時,是什么導致無法建立新連接?
  • 為什么即使設置了non-blocking選項,連接還是會阻塞?

這在Linux 2.6.3x內核中可以看到。

聽起來像是客戶端中的錯誤。 如果將套接字設置為非阻塞,然后調用connect ,則沒有理由應該阻塞connect調用。 您是否可以粘貼用於創建套接字,將其設置為非阻塞並調用connect的客戶端代碼? 另外,您確定它在connect呼叫本身中被阻止嗎?

我相信您的問題在這里已完全得到回答並且與SO_REUSEADDR有關。 關於使用SO_REUSEADDR的問題的另一個答案 -先前打開的套接字會發生什么? 也很重要

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM