客戶端主動關閉,傳送fin包。服務端收到fin,發出ack,停留在close_wait狀態。這個狀態持續時間非常長,伺服器如果積攢大量的close_wait狀態socket,有可能耗盡資源。為什麼會產生這樣情況?有可能sockfd通過fork被子程序複製了乙份,這樣該sockfd引用計數為2。在關閉socket時使用close()函式並沒有關掉該fd,僅僅是引用計數減1,所以服務端沒有向客戶端傳送fin,這樣就造成了socket處於close_wait狀態。解決的辦法是:使用shutdown()函式。關於shutdown()函式用法參見:linux網路程式設計之shutdown() 與 close()函式詳解。
TCP連線關閉總結
由於涉及面太廣,只作簡單整理,有興趣的可參考 unix networking programming volum 1,section 5.7,5.12,5.14,5.15,6.6 以及7.5 so linger選項。以乙個簡單的echo伺服器為例,客戶端從標準輸入讀入字元,傳送給伺服器,伺服器收到後...
tcp連線之滑動視窗總結
一 1,近來在工作中遇到乙個問題,tcp連線建立正常,但是在傳送方向接收端傳送資料報是,接收方程式出現假死狀態,無法接收資料,經過檢視發現接收方向傳送方傳送了zerowindows的資料報,即滑動視窗為0的情況,此種情況導致傳送方不在傳送相關的資料。2,滑動視窗簡介 在tcp連線中有兩種情況一種是固...
Android Http連線和TCP連線的區別
最近看到 裡提到某個架構選用tcp連線而不是http連線,意識到自己不知道這兩者的區別,遂查資料補一下知識。再用自己的話總結提煉一下 題目是android http連線和tcp連線的區別,因為我關注的使用場景是android環境,其實不管是android還是pc,應該都是一樣的。http是應用層協議...