【问题标题】:perl shutdown a socketperl 关闭一个套接字
【发布时间】:2012-09-05 13:50:37
【问题描述】:

有没有区别

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

【问题讨论】:

    标签: perl sockets


    【解决方案1】:

    shutdown 导致 TCP 连接的一侧停止读取 (0) 或写入 (1) 或两者 (2)。所以前两个 sn-ps 的效果是一样的,后面两个也是。

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

    单个close 和前面一个shutdown( fd, 2 ) 之间的区别在于,在第二种情况下,TCP 不会尝试将未完成的数据传递到远程端(请参阅SO_LINGER)。

    【讨论】:

    • 我遇到了一个意外错误。 $rc = shutdown($socket, 1); 按预期返回 1(无错误)。如果我按照$rc = shutdown($socket, 0); 跟踪它,它会返回0,而%!Transport endpoint is not connected,这不是我所期望的。如果我按照close 进行操作,它似乎会抛出并过早退出脚本。所以这对我来说似乎很奇怪。
    猜你喜欢
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多