【问题标题】:recv failed if socket fd more than 1024 in cpp linux如果 cpp linux 中的 socket fd 超过 1024,recv 失败
【发布时间】:2014-11-22 12:42:07
【问题描述】:

在我的项目中,每次客户端创建套接字文件描述符并将数据发送到服务器并接收等待响应时,我都使用打开关闭(服务器和客户端 c++ Linux 多线程)模型。在此过程中,在某些事务 rec v 失败后。为此,我观察到套接字文件描述符超过 1024。但我在 Linux 操作系统级别设置了最大允许文件描述符 8192。而且我还通过使用 thisis (netstat -an|grep "PORT NUMBER") 命令观察到另一件事观察到套接字连接是较少的连接(

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

【问题讨论】:

    标签: c++ linux sockets client


    【解决方案1】:

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

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

    【讨论】:

    • 您好,先生,我以前只选择。选择也面临同样的问题
    【解决方案2】:

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

    【讨论】:

    • 嗨先生,我观察到在我的测试环境中实际事务是每秒 100 个,但总是显示大约 300 到 400 个连接(数据库连接除外。包括数据库连接显示 300+DB 连接大小)。实际上我的应用程序通过 proc 块与 DB 连接。但当时相同的应用程序在较低版本的红帽 Linux 上运行良好,我的应用程序从未满足 1024 套接字 fd
    • 谁说过“交易”?您无法理解“查看 /proc//fd”的哪一部分?
    • 嗨,先生,我的实际问题仅涉及多线程案例。我明白你的分享,先生
    猜你喜欢
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    相关资源
    最近更新 更多