如果在cpp linux中socket fd超过1024,则recv失败

时间:2014-09-27 18:03:10

标签: c++ linux sockets client

在我的项目中,每次客户端创建套接字文件描述符并将数据发送到服务器并接收等待响应时,我使用open close(服务器和客户端c ++ Linux多线程)模型。在此过程中,某些事务rec v失败后。对于这个我观察到的套接字文件描述符超过1024.但我在Linux操作系统级别8192设置了最大允许文件描述符。而且我还通过使用thisis(netstat -an | grep“PORT NUMBER”)命令观察了一件事观察到那些连接较少的套接字连接(< 300)。我的连接池大小只有100。在这几个连接中,close_wait状态。

如何解决这个问题。请指教我。

2 个答案:

答案 0 :(得分:1)

1024是sys / select.h中FD_SETSIZE的通常定义(在我的系统上,深度包含在bits / typesizes.h中)

如果您使用的是select,则应停止使用pollepoll,因为它们在编译时不需要硬编码限制,只有最大打开文件数的运行时限制。

答案 1 :(得分:0)

听起来你正在泄漏一些其他文件描述符,而不一定是你的socket的文件描述符。你可能正在打开一些文件。查看/proc/<pid>/fd,它将列出给定流程的所有打开文件描述符。