gpt4 book ai didi

c - TCP 监听器套接字在接受() 时终止(错误 24 : too many files)

转载 作者:行者123 更新时间:2023-11-30 17:39:14 25 4
gpt4 key购买 nike

像往常一样,这些天我有一个关于我的网络冒险的问题。

我正在构建一个 UDP 到 TCP 中继服务器,并取得了一些成功,但以下场景是我的美中不足。

让我首先解释一下事情是如何运作的:- 服务器产生,检查内容并 fork 成为守护进程。- 在指定的 NIC 和端口上创建监听器套接字。- 此套接字接受传入连接,然后预计这些连接将发送 HTTP REST 请求以指定它们希望从手头的 Linux 服务器中继的多播地址。- 然后处理,等等:)一切正常。

事实上,一切正常,直到我测试了以下内容:

  • 有 2 个 TCP 输出 NIC、1 个 UDP 输入 NIC ->,因此 2 个进程正在运行。
  • 从相同的 UDP 地址范围中分别获取 120 个输入(总共 240 个)。

在客户端应用程序达到 120 并尝试在下一个 NIC 上拉取相同的快速应用程序后,在连接到 mcast 地址(此代码已被证明可以工作并且很好)成功但没有数据的情况下,出现了问题。已收到。让客户非常沮丧,但情况变得更糟。

过了一会儿,第二个进程中的accept()调用会产生错误代码24(文件太多),并且无论我是否关闭两个服务器进程的所有未完成的连接,它都会无限期地执行此操作。

但是,如果我坚持 120 个输入(这里只有 120 个内部可用的多播),并将 80 个输入放在 1 个服务器卡和 TCP NIC 上,将 40 个输入放在另一个上,那就没有问题了。

尽管我最近与网络问题发生了很多争吵,但我仍然是新手,所以有人为我提供了一些有用的信息吗?

非常感谢,如果需要更多详细信息/信息/代码,我很乐意提供。

最佳答案

您在某处泄漏连接。当您读取流末尾或从中收到错误时,请确保它们在所有可能的代码路径中关闭。

关于c - TCP 监听器套接字在接受() 时终止(错误 24 : too many files),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21886383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com