目錄
前言
6. TCP 的半關閉
6.1 何為半關閉
6.2 半關閉解決的用途
6.3 相關函數
參考
說明:
demo 基于 Linux。
關閉套接字API有:
close():單方面全斷開。
shutdown():可選斷開某個流。

如圖分為輸入流和輸出流兩個流,關閉其一就是半關閉。
單方面斷開可能帶來的問題如圖:
主機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 阿婆主