[メモ] TCP/IPプログラミングにおけるエラー処理 (RSTパケットの飛ばし方と検出の仕方)

SO_LINGER の秒数を 0 にしてソケットを閉じればいい。Perl で書くなら以下のような感じ。

setsockopt($sock, SOL_SOCKET, SO_LINGER, pack("II", 1, 0)) or die $!;
$sock->close()

一方で RST によって切断 (=異常切断された) かどうかはソケットからの読み込みが ECONNRESET エラーを返すかどうかで判断できる(正常切断なら 0 (==EOF) が返る)。