【发布时间】:2010-06-29 11:50:51
【问题描述】:
我目前有一个配置为跟踪两个 UDP sockers 的 select() 语句。我在一个通用数据套接字上每秒可能发送 10 到 20 条消息,这正如我预期的那样。
但是,一旦我收到大约 1024 条消息,我就会收到通知:
talker: socket: 打开的文件太多 talker: 绑定套接字失败
这对我来说是合乎逻辑的,因为 ulimit -n 显示此用户最多打开 1024 个文件。但是,为什么会有所有这些打开的文件?使用 UDP,没有建立连接,所以我认为我不需要每次都关闭一个套接字(尽管也许我错了)。
有什么想法吗?提前致谢。
【问题讨论】:
-
你在哪里创建套接字?等等,我看到您关于不需要关闭套接字的评论,因为它是 UDP。你仍然需要关闭它。但是您可以像现在一样在您的选择中重复使用它。我认为是您用来发送消息的代码导致了问题,而不是选择。
-
@SB 我已经添加了用于创建套接字的代码。您认为问题在于发送消息吗?嗯
-
@SB 我检查了我的发送代码 --- 我在转发消息后关闭了套接字。
-
哪边出错了?客户端还是服务器?
-
为什么会有多个socket?我同意这些家伙,这可能是套接字创建错误。
标签: c++ sockets select network-programming