【问题标题】:I don't want to close socket in my multi-client for single server program我不想在我的多客户端中为单个服务器程序关闭套接字
【发布时间】:2013-10-07 07:14:05
【问题描述】:

我正在 CentOS 6.2 上构建一个 C 套接字程序,如下所示。

  1. 服务器正在监听来自所有客户端的连接请求。

  2. 一旦建立连接,客户端开始向单个服务器发送日志数据。

问题是所有客户端都将日志数据发送到同一个端口,这使得CLOSE_WAIT 在客户端关闭连接时出现问题。

在网上冲浪时,我读到我应该关闭套接字以终止“CLOSE_WAIT”连接,这意味着服务器不能再接受来自另一个客户端套接字的日志数据。

有什么方法可以杀死端口上的特定会话?如果不可能,我应该创建多服务器侦听器吗?

【问题讨论】:

    标签: network-programming


    【解决方案1】:

    问题是所有客户端都将日志数据发送到同一个端口,这会在客户端关闭连接时产生 CLOSE_WAIT 问题。

    不,它没有。 CLOSE_WAIT 表示 (i) 对等方已经关闭了他的连接端,并且 (ii) 本地系统正在等待本地应用程序执行相同操作。它与“到同一个端口”无关,这是所有 TCP 服务的工作方式。

    我读到我应该关闭套接字以终止“CLOSE_WAIT”连接

    正确。

    这意味着服务器不能再接受来自另一个客户端套接字的日志数据。

    不,它没有。如果您关闭 listening 套接字,就会发生这种情况。您需要关闭 accepted 套接字,也就是您从中获得 EOS 的那个。

    有什么方法可以终止端口上的特定会话?

    关闭套接字。

    如果不可能,我应该创建多服务器侦听器吗?

    你确定已经这样做了吗?

    您对此没有任何选择。如果在读取套接字时收到流尾,则无法从中读取更多内容。永远。

    【讨论】:

      猜你喜欢
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多