|
通过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方法中获取不到对端的地址信息,现在还没有找到原因和解决方法,请高手帮忙分析一下,多谢了。 |
|