基於TCP傳輸的網路編程異常處理

來源:互聯網
上載者:User

基於TCP傳輸的網路編程異常處理
一:進程一端退出(exit,CTRL+C,掛掉)(跟主動CLOSE、主動關機一樣)
 核心會關閉所有控制代碼觸發FIN分節發送(但如果設定了SO_LINGER l_onoff為1,則發送RST分節對方)
 FIN分節處理: 另一端recv 返回0 表示對端結束
 RST分節處理: 另一端recv 返回-1 表示對端錯誤,錯誤碼為connection reset by peer
        如果另一端send 則會導致進程接收SIGPIPE訊號,該訊號預設終止進程,
        需要signal(SIGPIPE,SIG_IGN);

二:一端主機崩潰(非主動關機)、中間路由不通
  另一個發送的資料核心會重傳,發送緩衝區資料一直增加
  設定的發送逾時只要發送緩衝區能裝的下,send就不會報錯的(記住send只是拷貝資料到核心)
  如何檢測另一個端死了,必須採用以下方法
  1.開啟KEEP_ALIVE 心跳機制
  2.應用程式層心跳機制
        

三:伺服器主機崩潰後重啟
  之前TCP串連資訊已丟失,對後續接收到的用戶端以RST響應;
  當然也可能在重啟前就已經通過心跳機制檢測到了異常


附非正常結束和正常結束及TCP狀態切換圖


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.