accept()块(挂起连接时)

时间:2013-08-08 09:09:46

标签: c sockets

我注意到接受这个奇怪的问题。我有一台在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,但没有效果。

1 个答案:

答案 0 :(得分:0)

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

这种测试没有任何证据。您不会让单个客户端以最大速率连接和断开连接。