像往常一样,这些天我对我的网络冒险有疑问。

我正在构建一个UDP到TCP中继服务器,并取得了一些成功,但是以下情况是我的想法。

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

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


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


客户端应用程序达到120并尝试在下一个NIC上拉出相同的速度后,从某种意义上说出错了,即成功连接到mcast地址(该代码被证明可以正常工作,并且很好),但是没有接收到数据。令客户沮丧的是很多,但情况变得更糟。

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

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

不管我最近对网络问题的争吵如何,我仍然是新手,所以有人能为我提供一些有用的信息吗?

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

最佳答案

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

关于c - TCP监听器套接字在accept()上死亡(错误24:文件过多),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21886383/

10-10 12:36