嗯..我使用典型的epoll +多线程模型来处理大量套接字,也就是说,我有一个名为epollWorkThread的线程,它使用epoll_wait来处理i / o套接字。虽然有一个EPOLLIN事件,但recv()将完成工作,我确实使用noblocking模式允许立即返回。并且recv()确实处于while(true)循环中。 在最初的时间(可能是几个小时或者几分钟,或者如果我是幸运的日子),一切都很好,我可以收到信息。但是一段时间后,recv()坚持用errno = 107(ENOTCONN)返回-1。传输的另一个对等体是用AS3编写的,它确保套接字已连接。所以我对recv()行为感到困惑。提前感谢您,任何评论都表示赞赏!
答案 0 :(得分:3)
Errno 107表示套接字 NOT 已连接(不再)。 有几个原因导致这种情况发生。假设您是正确的并且连接的两端都声称套接字仍处于打开状态,则中间路由器/交换机可能由于超时而丢弃了连接。避免此类事件发生的最安全方法是定期发送“健康”或“保持活跃”的消息。 (因此中间路由器/交换机接受连接为生活......)=