我已经编写了C ++客户端服务器应用程序,服务器崩溃了。
场景


启动服务器
1小时后(而不是之前)客户端连接


然后,正在等待接受的服务器返回-1,错误号为“打开的文件太多”。

机器上没有其他特别的操作,这使我相信accept在等待时会打开许多​​文件描述符。
真的吗?
如何解决此问题,以便客户端可以随时连接?

相关的服务器代码:

int sockClient;
while (true) {

    sockaddr_in* clientSockAddr = new sockaddr_in();
    socklen_t clientSockAddrLen = sizeof(sockaddr_in);

    sockClient = accept(sockServer, (sockaddr *) clientSockAddr,
                        &clientSockAddrLen);

    if(sockClient == -1 ){
        std::ostringstream s;
        s << "TCP Server: accept connection error." << std::strerror(errno);
        throw runtime_error(s.str());
    }

    connection->communicate(sockClient, clientSockAddr, clientSockAddrLen);
}

最佳答案

您在某处有文件描述符泄漏。完成接受的套接字后,可能不会关闭它们,否则它就在某个文件中。

10-02 10:49