我在使用 c++ 的 select
实现服务器同时连接多个客户端,出现的情况是有的时候 FD_ISSET
可以监测处哪些 socket 可读,有的时候虽然所有 socket 用 FD_ISSET
都返回 0,但是客户端是发送了数据过来的。如果读取 socket,是可以读到客户端发的内容,但是 FD_ISSET
和 select
函数并不会标记该 socket 为可读。
当我用多个客户端和服务器向服务器发信息的时候,一般是前几次所有 socket 都可以正常检测出可读的 socket,逐渐的,可检测出的可读 socket 越来越少,直到所有 socket 都被认为是不可读。
不知道有没有哪位大佬知道原因。我现在用 macOS 写代码,调用的并不是 FD_ISSET
而是 __DARWIN_FD_ISSET
,不知道和这个有没有关系。
顺便问一下,FD_ISSET
的值是什么时候更新的?我在读 socket 前后各返回了 FD_ISSET
,返回的是相同的值(该值表示 socket 可读)。所以是在执行 select
时候更新的吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.