2012-09-05 9 views
9

perlのシャットダウンソケット

shutdown($socket, 0) if $socket; 
shutdown($socket, 2) if $socket; 
close($socket) if $socket; 

shutdown($socket, 2) if $socket; 
close($socket) if $socket; 

との差が、また

shutdown($socket, 1) if $socket; 
shutdown($socket, 2) if $socket; 
close($socket) if $socket; 

shutdown($socket, 2) if $socket; 
close($socket) if $socket; 
に差があるあります

そして最後にcloseが必要ですか?

答えて

12

shutdownは、TCP接続の一方の側で(0)、または書き込み()、またはその両方(2)を停止させます。したがって、最初の2つのスニペットは次の2つと同じ効果を持ちます。

shutdownはファイルディスクリプタを解放しないので、まだcloseが必要です。

shutdown(fd, 2)

が先行単一closeとの違いは、第二のケースでは、TCP(SO_LINGERを参照)がリモート側に未処理データを配信しようとしないことです。