front_windy 发表于 2009-8-21 19:36:22

反应式接收器linux下不能工作?

我用reactor框架实现了一个接收器,被动监听连接,在window下工作很好,相同的代码在linux下就不能工作了。本来有客户端连进来应该回调handle_input的,可是没有被回调,不知道为什么。代码段见下边。

    //这是注册接受事件
    ACE_INET_Addr listenAddr(m_nPort);
    if(m_Acceptor.open(listenAddr, 1) == -1)
    {
      ACE_DEBUG((LM_ERROR, _T("m_Acceptor.open(listenAddr, 1) == -1\n")));
      return -1;
    }

    return ( (ACE_Reactor::instance())->register_handler(this, ACE_Event_Handler::ACCEPT_MASK) );



    //这段是handle_input
    int CReactiveAcceptor::handle_input(ACE_HANDLE fd)
    {
   
      //创建一个空消息,唤醒线程接受连接
      ACE_Message_Block *pMsg = new ACE_Message_Block(0, ACE_Message_Block::MB_DATA);
      putq(pMsg);

       return 0;
   }

winston 发表于 2009-8-21 20:47:38

你用的是select reactor还是什么实现?

front_windy 发表于 2009-8-21 20:51:51

回复 #2 winston 的帖子

应该是select_reactor, run_reactor_event_loop时候返回-1,貌似是要设置什么所有者,还没搞太明白。

front_windy 发表于 2009-8-21 21:31:47

可以了,需要在运行事件循环的线程里设置所有者。
ACE_Reactor::instance()->owner(ACE_OS::thr_self());
页: [1]
查看完整版本: 反应式接收器linux下不能工作?