iBa*_*hus 5 c++ posix network-programming
嗯..我使用epoll+multithread的典型模型来处理海量socket,也就是我有一个线程叫做epollWorkThread,它使用epoll_wait来处理i/o socket。虽然有 EPOLLIN 事件,但 recv() 会完成工作,我确实使用无阻塞模式来允许立即返回。而 recv() 确实处于 while(true) 循环中。在最初的时间里一切都很好(可能是几个小时或几分钟,或者如果我很幸运的话),我可以收到信息。但一段时间后,recv() 坚持返回 -1 并带有 errno = 107(ENOTCONN)。传输的另一个对等体写入 AS3,以确保套接字已连接。所以我对 recv() 行为感到困惑。在此先感谢您,并感谢您的任何评论!
小智 5
Errno 107 意味着套接字未连接(不再)。发生这种情况的原因有多种。假设您是对的,并且连接双方都声称套接字仍然打开,则中间路由器/交换机可能由于超时而断开连接。避免此类事情发生的最安全方法是定期发送“健康”或“保持活动”消息。(因此中间路由器/交换机将连接视为活动连接...)=