1小时后第一次连接后Tcp接受失败

时间:2014-04-06 08:09:00

标签: c++ tcp client-server

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

  1. 启动服务器
  2. 1小时后(不是之前)客户端连接
  3. 然后在accept中等待的服务器返回-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);
    }
    

1 个答案:

答案 0 :(得分:1)

某处有文件描述符泄漏。当你完成它们时,你可能还没有关闭已接受的套接字,或者它在某个地方的某个文件上。