【问题标题】:How to detect CLOSE_WAIT on socket in C on Linux?如何在 Linux 上的 C 中检测套接字上的 CLOSE_WAIT?
【发布时间】:2014-11-18 16:56:29
【问题描述】:

我正在编写 TCP 客户端,我想在连接中断时立即重新连接(即服务器重新启动)。我想尽快重新启动连接,即使没有数据可以通过这个套接字发送。我在 netstat 中看到连接处于 CLOSE_WAIT 状态,但 select、getsockopt 或 getpeername 没有错误。 我知道我可以尝试向socket写一些东西,但是这个连接只是为了读取。

【问题讨论】:

    标签: c linux sockets status


    【解决方案1】:

    来自man recv

    返回值

    这些调用返回接收到的字节数,如果发生错误,则返回 -1。当对端执行有序关闭时,返回值为 0。

    【讨论】:

    • CLOSE_WAIT 表示从对等方收到FIN。这将导致select() 报告套接字是可读的,然后recv() 将返回 0。这就是手册页所指的“有序关闭”。
    猜你喜欢
    • 2018-12-16
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 2013-04-01
    • 2017-10-09
    • 1970-01-01
    • 2013-03-17
    相关资源
    最近更新 更多