像往常一样,我对我的网络冒险有疑问。
我正在构建一个UDP到TCP中继服务器,取得了一些成功,但下面的方案是我的美味洋葱。
首先让我解释一下如何运作: - 服务器生成,检查东西和分叉成为守护进程。 - 在指定的NIC和端口上创建侦听器套接字。 - 此套接字接受传入连接,然后发送HTTP REST请求以指定他们希望从手头的Linux服务器中继哪个多播地址。 - 然后处理,等等:)这一切都有效。
事实上它一切正常,直到我测试了以下内容:
在客户端应用程序命中120并尝试在下一个NIC上拉出相同的快速连接之后,在某种意义上连接到mcast地址(此代码被证明可以正常工作并且很好)的事情出错了,但没有数据是接收。令客户感到沮丧,但情况变得更糟。
稍后,第二个进程中的accept()调用会产生错误代码24(文件太多),并且无论是否关闭两个服务器进程的所有未完成连接,它都将无限制地执行此广告。
但是,如果我坚持使用120个输入(我这里内部只有120个多播)并且将80个放在1个服务器卡和TCP网卡上,40个放在另一个上,那就没问题了。
不管我最近有多少关于网络的争吵,我仍然是新手,所以任何人都可以获得一些有用的信息吗?
非常感谢,如果需要更多细节/信息/代码,我很乐意供应。
答案 0 :(得分:0)
你正在某处泄露连接。当您读取流结束或从中获取错误时,请确保它们在所有可能的代码路径中关闭。