天天看點

【網絡程式設計】TCPIP-6-TCP的半關閉

目錄

前言

6. TCP 的半關閉

6.1 何為半關閉

6.2 半關閉解決的用途

6.3 相關函數

參考

說明:

demo 基于 Linux。

關閉套接字API有:

close():單方面全斷開。

shutdown():可選斷開某個流。

【網絡程式設計】TCPIP-6-TCP的半關閉

如圖分為輸入流和輸出流兩個流,關閉其一就是半關閉。

單方面斷開可能帶來的問題如圖:

【網絡程式設計】TCPIP-6-TCP的半關閉

主機A發完了就斷開了,萬一主機B還有資料恢複咋搞。

那就采用半關閉,主機A發完就關閉發送流,保留接收流。

參數<code>howto</code>:

<code>SHUT_RD</code> : 斷開輸入流。套接字無法接收,同時,緩沖區的資料也被清空。

<code>SHUT_WR</code> : 斷開輸出流。套接字無法發送,但是和 <code>close()</code> 一樣,緩沖區的資料依舊能發送出去。

<code>SHUT_RDWR</code> : 同時斷開 I/O 流。同時關閉 I/O 流。

小知識:

調用 <code>close()</code> 後:

輸入緩沖區的資料被丢棄。

輸出緩沖區的資料依舊能發送到目的端。

調用 <code>shutdown()</code> 後:

關閉輸入流後,輸入緩沖區的資料被丢棄。後面新來的資料流,會對其進行 ACK,然後丢棄。

關閉輸出流後,輸出緩沖區的資料依舊能發送到目的端。

《TCP/IP網絡程式設計》

李柱明部落格-TCP/IP TCP詳細筆記

github 阿婆主

繼續閱讀