【问题标题】:accept() blocks (while pending connections)accept() 块(挂起连接时)
【发布时间】:2013-08-09 22:23:46
【问题描述】:

我注意到接受这个奇怪的问题。我有一个在 FreeBSD 上运行的服务器和一个在 Windows 上运行的客户端。

一切正常,但我已经开始进行一些压力测试。我注意到在 1000 个连接之后

客户端,服务器只是停止接受任何新连接。知道为什么吗?

我猜这与 TCP 协议握手有关,但其他人注意到了吗?有什么解决办法吗?

服务器

    socket() // ipv4
    bind()
    listen(... , 0xFFFF)

    while (true) {
        sock=accept(socket, NULL, NULL);
        if (sock<=0)
            break;
        close(sock);
    }

客户

    int count=0;
    while (true) {
        count++;
        socket(...)
        connect(...)
        close(...)
        fprintf(stderr, "Count: %i\r", count);
    }

大约 1000 次连接后,服务器在接受中阻塞。

我已将 kern.ipc.maxsockets 设置为 65535,但没有效果。

【问题讨论】:

标签: c sockets


【解决方案1】:

您似乎没有在测试任何错误。我建议你这样做。我怀疑您会发现问题是由于端口耗尽,客户端已停止连接。

这种测试证明不了任何事情。您不会有单个客户端以最大速率连接和断开连接。

【讨论】:

  • 这样测试服务器的时候,我把TIME_WAIT间隔减少到6秒,(但需要注意'cos全局设置,所以在测试后重新设置)。
  • EJP,我没有测试错误。我已经使用不同站点上的两个客户端运行了测试。 Martin James:是的,TIME_WAIT 间隔解决了,谢谢!
  • @EduardSuica 所以你的测试毫无价值。再次运行它,但这次在两端进行一些适当的错误检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 2022-01-17
  • 2014-08-15
  • 1970-01-01
  • 2019-10-14
相关资源
最近更新 更多