【问题标题】:What is the state of a TCP socket after remote closed?远程关闭后 TCP 套接字的状态是什么?
【发布时间】:2010-09-26 22:39:29
【问题描述】:

假设我已经接受()到我的服务器(在 Solaris 上运行)的连接,并且客户端已经关闭了连接。在服务器端关闭()它之前,服务器端的套接字(在 netstat 类别中)的状态是什么?绑定了吗?

【问题讨论】:

    标签: sockets tcp solaris netstat


    【解决方案1】:

    将会是 CLOSE_WAIT,看 tcp 状态图,e.g.在http://en.wikipedia.org/wiki/File:Tcp_state_diagram_new.svg

    【讨论】:

      【解决方案2】:

      在这种情况下,客户端上的套接字将处于 TIME_WAIT 状态,而服务器上的套接字将经过 CLOSE_WAIT 并很快移动到 CLOSED,因此在它完全从列表中消失之前,您可能无法在 netstat 中捕获它。

      【讨论】:

        【解决方案3】:

        它应该是CLOSE_WAIT,因为启动FIN 的末尾首先是TIME_WAIT ---> CLOSED

        在这种情况下,首先启动的是客户端。所以服务器会去CLOSE_WAIT

        【讨论】:

          【解决方案4】:

          CLOSE_WAIT

          您可以通过以下方式查看:

          ps辅助

          lsof -a -p [server_process_id]

          你会得到:袜子 0,8

          状态 8:TCP_CLOSE

          【讨论】:

            【解决方案5】:

            我猜,TIME_WAIT。

            你可以在 Linux 上用“netstat”查看它,不知道在 Solaris 上是怎么做的。

            【讨论】:

            • 不,TIME_WAIT 是 本地端的套接字关闭()之后。我在关闭()描述符之前询问了状态。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-26
            • 2017-05-20
            • 2015-03-29
            • 2018-05-26
            • 2016-05-08
            • 2023-03-11
            相关资源
            最近更新 更多