perl关闭一个套接字

bli*_*iof 9 sockets perl

两者之间有区别吗?

shutdown($socket, 0) if $socket;
shutdown($socket, 2) if $socket;
close($socket) if $socket;
Run Code Online (Sandbox Code Playgroud)

shutdown($socket, 2) if $socket;
close($socket) if $socket;
Run Code Online (Sandbox Code Playgroud)

也有区别

shutdown($socket, 1) if $socket;
shutdown($socket, 2) if $socket;
close($socket) if $socket;
Run Code Online (Sandbox Code Playgroud)

shutdown($socket, 2) if $socket;
close($socket) if $socket;
Run Code Online (Sandbox Code Playgroud)

最后是close需要的吗?

Nik*_*sov 13

shutdown导致TCP连接的一端停止读取(0),写入(1)或两者(2).因此前两个片段具有相同的效果,接下来的两个片段也是如此.

shutdown不会释放文件描述符,因此close仍然需要.

单个close和前面的一个区别在于shutdown( fd, 2 ),在第二种情况下,TCP不会尝试向远程端提供未完成的数据(请参阅参考资料SO_LINGER).