最近服务器在启动时出现一个怪现象:中心服提示连接数据服成功,但数据服却没有收到中心服的任何连接信息
用lsof分别检查中心服和数据服的连接套接字,发觉中心服确实是有一个连接指向数据服的,但数据服却没有连接指向中心服.
很奇怪为什么会出现这种问题,难道TCP的可靠传输变得不可靠了?觉得这种想法有点好笑,检查了一下代码,发现了问题所在:
原来,在服务器启动时,会同时瞬间上来7、8个连接,而服务器是epoll的ET模式工作的,只会通知一次,而且触发后,监听socket只进行了一次accept,导致有些连接没有accept出来,改进方法是在accept外层包含一个死循环,判断accept失败码为EAGAIN后跳出循环后,问题就解决了.