[英]recv failed if socket fd more than 1024 in cpp linux
在我的項目中,每次客戶端創建套接字文件描述符並將數據發送到服務器並接收等待響應時,我都會使用open close(服務器和客戶端c ++ Linux多線程)模型。在此過程中,某些事務接收失敗之后。 為此,我觀察到套接字文件描述符大於1024。但是我在Linux操作系統級別8192上設置了允許的最大文件描述符。此外,我還通過使用thisis(netstat -an | grep“ PORT NUMBER”)命令觀察到另一件事。觀察到套接字連接較少(<300)。 我的連接池大小僅為100。 在這幾個連接中,close_wait狀態。
如何解決這個問題。請建議我。
1024是sys / select.h中FD_SETSIZE
的常規定義(在我的系統上,深深地包含在bits / typesizes.h中)
如果使用select
,則應該停止並使用poll
或epoll
,因為它們在編譯時不需要硬編碼的限制,所以僅對最大打開文件數的運行時限制。
聽起來您正在泄漏其他文件描述符,而不一定是套接字的文件描述符。 您可能會打開一些文件。 查看/proc/<pid>/fd
,它將列出給定進程的所有打開的文件描述符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.