2012-09-05 141 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)或写入(1)或两者(2)。所以前两个片段的效果相同,接下来的两个片段也是如此。

shutdown不释放文件描述符,所以仍然需要close

close和一个通过前面shutdown(fd, 2)之间的区别是,在第二种情况下TCP不会尝试未完成的数据传送到远程侧(参见SO_LINGER)。