how=1 shutdown() は、close() と異なり、必ず FIN が出るので、close() で FIN が出ずにデッドロックする場面で有効に使えます。
とりあえず shutdown() を使ってみた例。(別に close() でもかまわない例)
close() だとデッドロックしてしまう例。
クライアント側が 送信専用プロセスと受信専用プロセスに分かれています。
どこかに "一定時間受信が無ければ強制切断" みたいな処理が入ってない場合、いつまでもこのまま…。
(前の絵では書いてた 3-way handshake とか、FIN に対する ACK とかは略。以下同じ。)
shutdown() を使って上のデッドロックを回避した例。