找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3398|回复: 3

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

[复制链接]
发表于 2009-8-21 19:36:22 | 显示全部楼层 |阅读模式
我用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;
     }
发表于 2009-8-21 20:47:38 | 显示全部楼层
你用的是select reactor还是什么实现?
 楼主| 发表于 2009-8-21 20:51:51 | 显示全部楼层

回复 #2 winston 的帖子

应该是select_reactor, run_reactor_event_loop时候返回-1,貌似是要设置什么所有者,还没搞太明白。
 楼主| 发表于 2009-8-21 21:31:47 | 显示全部楼层
可以了,需要在运行事件循环的线程里设置所有者。
ACE_Reactor::instance()->owner(ACE_OS::thr_self());
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 23:48 , Processed in 0.014801 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表