accept()块(挂起连接时)

accept()块(挂起连接时),c,sockets,C,Sockets,我注意到了accept这个奇怪的问题。我有一个在FreeBSD上运行的服务器和一个在Windows上运行的客户端 一切正常,但我已经开始做一些压力测试。我注意到,在从 客户端和服务器只是停止接受任何新连接。知道为什么吗 我猜这与TCP协议握手有关,但有人注意到了吗?有什么解决办法吗 服务器 大约1000个连接后,服务器将阻塞accept 我已将kern.ipc.maxsockets设置为65535,但没有效果。您似乎没有测试任何错误。我建议你那样做。我怀疑您会发现问题在于,由于端口耗尽,客户端已

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

一切正常,但我已经开始做一些压力测试。我注意到,在从

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

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

服务器 大约1000个连接后,服务器将阻塞accept


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

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


这种测试证明不了什么。您不会有以最大速率连接和断开连接的单个客户端。

您是否会发现这有帮助:检查链接页面所有可用套接字都已卡入时间\u等待?一些建议的工具可供查看:,在测试这样的服务器时,我将等待时间间隔缩短为6秒,(但是需要小心'cos global setting,所以在测试后要返回。')EJP,我没有测试错误。我在不同的工作站上使用两个客户端运行了测试。马丁·詹姆斯:是的,TIME_WAIT interval解决了它,谢谢!@EduardSuica所以你的测试毫无价值。再次运行它,但这次在两端都进行了一些适当的错误检查。
    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);
    }