找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4084|回复: 4

ACE_Acceptor ACE_TP_Reactor 2

[复制链接]
发表于 2010-12-12 22:05:06 | 显示全部楼层 |阅读模式
通过ACE_Acceptor创建对象如下:ACE_Acceptor<CServer_Acceptor,ACE_SOCK_ACCEPTOR> acceptor;
   
CServer_Acceptor 为自己定义的类

class CServer_Acceptor: public ACE_Svc_Handler<ACE_SOCK_STREAM,ACE_MT_SYNCH>
        {
        public:
               
        CServer_Acceptor();
               ~CServer_Acceptor();
               
        virtual int handle_input(ACE_HANDLE fd = ACE_INVALID_HANDLE);

        virtual int handle_close(ACE_HANDLE /* = ACE_INVALID_HANDLE */, ACE_Reactor_Mask /* = ACE_Event_Handler::ALL_EVENTS_MASK */);

        static long m_lCount;
        long m_lNum;
               
        };

int CServer_Acceptor::handle_input(ACE_HANDLE fd)
        {
                ACE_INET_Addr addr;
                if(-1 == this->peer().get_remote_addr(addr))
                {
                        log_msg(OPINFO_ALL,"获取客户端IP失败[%d:%s]",ACE_OS::last_error(),ACE_OS::strerror(ACE_OS::last_error()));
                        return 0;
                }
          log_msg(OPINFO_ALL,"与客户机[%s:%d]建立连接",addr.get_host_addr(),addr.get_port_number());
          this->peer().close();
                return 0;
     }
当存在并发,并且连接频繁时,handle_input方法中获取不到对端的地址信息,现在还没有找到原因和解决方法,请高手帮忙分析一下,多谢了。
 楼主| 发表于 2010-12-19 22:59:05 | 显示全部楼层
都没有遇到过这个问题吗?
自己顶一下
发表于 2010-12-20 09:31:50 | 显示全部楼层
把ACE_OS::last_error(),ACE_OS::strerror(ACE_OS::last_error()打印出来的信息贴一下。
另外 log_msg是什么东西?
不要自己声明ACE_Log_Msg的实例,直接用宏或者单件!
发表于 2010-12-20 09:40:47 | 显示全部楼层
在Open方法中获得链接地址。
        //获得远程链接地址和端口
        if(this->peer().get_remote_addr(m_addrRemote) == -1)
        {
                OUR_DEBUG((LM_ERROR, "[CConnectHandler::open]this->peer().get_remote_addr error.\n"));
                sprintf_safe(m_szError, MAX_BUFF_500, "[CConnectHandler::open]this->peer().get_remote_addr error.");
                return -1;
        }
有时候input失败,你先要确定input的时候是否是网络断开,如果网络断开的话,你获得地址自然是无效的,在reactor里面,链路断开也会通知input。
发表于 2010-12-21 15:14:52 | 显示全部楼层
freeeyes正解
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-5-17 06:03 , Processed in 0.011186 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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