當我的兩個守護進程互相對話時,我的套接字卡在close_wait中。在閱讀了關於這個主題的不同問題和博客文章之後,我證實我正在關閉來自雙方(發起者和接收者)的套接字。插槽卡在CLOSE_WAIT
模型去如下:
發件人: 建立連接,發送數據,等待確認,關閉連接
接收機: 接收連接,讀取數據,發送確認,關閉連接
任何人都可以告訴我我做錯了什麼嗎?注意:我正在使用close()來關閉連接。我已經嘗試使用關機,它並沒有改變的事情。任何提示將不勝感激。
編輯: 關閉套接字後不久,接收守護進程分叉。我試圖將文件描述符傳遞給在子進程中分叉並明確關閉它的函數,但是這並沒有解決我的問題。還有其他方式可以影響這個過程嗎?請注意發送守護進程不分叉。
你的意思'TIME_WAIT'狀態? – sarnold
你是什麼意思「卡住」?整個過程需要花費幾分鐘時間才能回收。如果您想避免等待,請通過'setsockopt'使用SO_REUSEADDR。 – Duck
@Duck - 被卡住我的意思是我快速地看到其他套接字打開和關閉(不再出現在netstat的輸出中),但是一組連接打開並無限期地進入CLOSE_WAIT狀態。我已經看了5分鐘左右,他們似乎並沒有接近。他們現在堅持了10分鐘。我認爲他們永遠不會離開。 – dbeer