如果cpp linux中的套接字fd超过1024,则recv失败 在我的项目中,每当客户机创建套接字文件描述符,并在服务器上发送数据到服务器并接收响应时,我使用开闭(服务器和客户机C++ Linux多线程)模型,在这个过程中,在一些事务失败之后。为此,我观察到套接字文件描述符大于1024。但我在Linux操作系统级别8192设置了最大允许文件描述符。通过使用thisis(netstat-an | grep“PORT NUMBER”)命令,我还观察到了另一件事:观察到的套接字连接较少(

如果cpp linux中的套接字fd超过1024,则recv失败 在我的项目中,每当客户机创建套接字文件描述符,并在服务器上发送数据到服务器并接收响应时,我使用开闭(服务器和客户机C++ Linux多线程)模型,在这个过程中,在一些事务失败之后。为此,我观察到套接字文件描述符大于1024。但我在Linux操作系统级别8192设置了最大允许文件描述符。通过使用thisis(netstat-an | grep“PORT NUMBER”)命令,我还观察到了另一件事:观察到的套接字连接较少(,c++,linux,sockets,client,C++,Linux,Sockets,Client,如何解决这个问题。请建议我 听起来像是在泄漏其他文件描述符,而不一定是套接字的文件描述符。你可能会留下一些打开的文件。查看/proc//fd,它将列出给定进程的所有打开的文件描述符。1024是sys/select.h中的fd\u SETSIZE的常用定义(在我的系统上,从bits/typesize.h中深入包含) 如果您使用的是select,您应该停止使用poll或epoll,因为它们在编译时不需要硬编码限制,只需要对打开的文件的最大数量的运行时限制。您好,先生,我观察到,在我的测试环境中,实际

如何解决这个问题。请建议我

听起来像是在泄漏其他文件描述符,而不一定是套接字的文件描述符。你可能会留下一些打开的文件。查看
/proc//fd
,它将列出给定进程的所有打开的文件描述符。

1024是sys/select.h中的
fd\u SETSIZE
的常用定义(在我的系统上,从bits/typesize.h中深入包含)


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

您好,先生,我观察到,在我的测试环境中,实际事务是每秒100个,但始终显示300到400个连接(db连接除外。包括db连接,显示300+db连接大小)。实际上,我的应用程序通过proc块与DB连接。但同样的应用程序在当时的red hat Linux的较低版本上运行良好,我的应用程序从未遇到过用户,谁说过“事务”呢?“Look into/proc//fd”的哪一部分您不能理解?您好,先生,我的实际问题只是多线程情况。我理解你的分享sirhi先生,以前我只选择。select也面临同样的问题