2 つの TCP エンドポイント間で確立された TCP 接続を考えてみましょう。そのうちの 1 つは次のいずれかを呼び出します。
close()
: ここでは、これ以上の読み取りまたは書き込みは許可されていません。shutdown(fd, SHUT_WR)
: これにより、全二重接続がシンプレックス接続に変換されます。この場合、エンドポイントの呼び出しSHUT_WR
は引き続き読み取ることができます。
ただし、どちらの場合も、FIN パケットがワイヤ上でピア エンドポイントに送信されます。問題は、FIN を受信する TCP エンドポイントが、他のエンドポイントがclose()
またはを使用したかどうかをどのように区別できるかというSHUT_WR
ことです。後者のシナリオでは、まだデータを送信できるはずだからです。