Tcp 接受在 1 小时后首次连接后失败
Tcp accept fails after first connection after 1 hour
我已经编写了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);
}
您在某处有一个文件描述符泄漏。可能您在完成接受的套接字后没有关闭它们,或者它在某个地方的文件中。
相关文章:
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- 从 Linux OMI (omicli) 到 Windows WMI 的连接失败,并出现与 DMTF 相关的错误
- 为什么我在蓝牙连接()上收到"java.io.IOException:读取失败,套接字可能关闭或超时,读取re
- C++ 链表合并排序的实现在连接 1 个以上节点的子列表时失败
- Eclipse:错误:初始化模式失败(无法连接到目标)
- 什么时候标准::线程::连接会因no_such_process而失败
- 连接到套接字失败 - 错误编号 88 (CPP)
- DirectX 11 GetDisplayModeList() 在远程桌面连接中失败
- C/C++ 套接字:如果我在 IPv6 TCP 连接之前执行任何操作,则连接将失败
- vcpkg 安装失败,并显示"SSL 连接错误"
- Wlanconnect连接尝试失败
- 按钮连接Qt失败
- 在应用程序中检查互联网连接C++可靠方法:gethostbyname() 失败
- ADO 连接创建实例在 Windows Server 2003 上失败
- Unix 服务器 - Windows 客户端,连接失败
- 彭博 API 连接问题 - <本地主机:8194> 连接失败
- 如何在连接失败后清理套接字
- 使用CMake、DSO-Link-Change连接失败
- 客户端连接()失败,服务器端接受()成功.为什么
- CGAL + Polygon_set连接失败