Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TCP侦听器套接字在accept()上死亡(错误24:文件太多)_C_Sockets_Tcp_Udp - Fatal编程技术网

TCP侦听器套接字在accept()上死亡(错误24:文件太多)

TCP侦听器套接字在accept()上死亡(错误24:文件太多),c,sockets,tcp,udp,C,Sockets,Tcp,Udp,像往常一样,这些天我对我的网络冒险有一个问题 我正在构建一个UDP到TCP中继服务器,取得了一些成功,但下面的场景是我美中不足的地方 首先让我解释一下事情是如何运作的: -服务器生成、检查内容并分叉成为守护进程。 -在指定的NIC和端口上创建侦听器套接字。 -这个套接字接受传入的连接,然后期望这些连接发送一个HTTP REST请求,以指定希望从手头的Linux服务器中继哪个多播地址。 -然后就处理好了,等等:)一切正常 事实上,这一切都很好,直到我测试了以下各项: 有2个TCP输出NIC,1个

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

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

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

事实上,这一切都很好,直到我测试了以下各项:

  • 有2个TCP输出NIC,1个UDP输入NIC->,因此有2个进程正在运行
  • 分别从相同的UDP地址范围中获取120个输入(总共240个)
在客户端应用程序点击120并尝试在下一个NIC上拉同一个快速网卡后,出现了问题,即连接到mcast地址(此代码已被证明工作正常)成功,但未收到任何数据。这让客户非常失望,但情况会变得更糟

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

但是,如果我坚持使用120个输入(我这里只有120个内部可用的多播),在一个服务器卡和TCP NIC上放置80个,在另一个上放置40个,就不会有问题

尽管我最近和网络上的东西吵了很多架,但我还是个新手,所以有人能给我一些有用的信息吗


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

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

您检查过这不是问题吗?谢谢-继续研究!