当前位置: 代码迷 >> 综合 >> servernet网络出错问题总结
  详细解决方案

servernet网络出错问题总结

热度:96   发布时间:2024-02-06 18:52:05.0

在外网上运行平台,通信模块经常会出现网络错误110,一直触发accept事件,accept时阻塞5秒,影响数据的收发。

通过打日志发现, CTCPSessionMgr2::handle_input(ACE_HANDLE fd)过来的fd,已经不是注册时的fd了

CTCPSessionMgr2::Connect时会向

m_pReactor->register_handler(m_listener.get_handle(), this, ACE_Event_Handler::ACCEPT_MASK);

查找原因:

是因为开始启动时,commonserver会Connect监听一个端口,调用了注册accept事件,然后集控模块监听客户端时,没有生成新的管理对象,也调用了Connect监听另一个端口,注册了accept事件。

当有客户端连接第一个端口,会触发这个对象的accept事件,然后在后一个端口进行accept,当然会超时失败。返回0,因为第一个端口的事件没有处理完,一直会触发。

 

修改:

1、监听时new一个对象,使用不同的对象进行accept

2、accept时如果fd不是自己返回-1,不再处理这个非法fd的事件

  相关解决方案