c-accept()块(当挂起连接时)



我注意到accept的这个奇怪问题。我有一个在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: %ir", count);
    }

在1000个左右的连接之后,服务器会阻止接受。

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

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

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

最新更新