make_handler后,从缓冲池中创建了一个接收器,但在validate_connection时验证不通过,即返回-1,这时是否连接没建立,需要把这个连接器返回给内存池呢?
//平常客户端的Acceptor
//*.h
class CPigProactorAccept : public ACE_Asynch_Acceptor<CPigProactorAcceptHandler>
{
private:
virtual CPigProactorAcceptHandler *make_handler (void);
virtual int validate_connection (const ACE_Asynch_Accept::Result& result,
const ACE_INET_Addr &remote,
const ACE_INET_Addr& local);
};
//*.cpp
//==========================================================================
/************************************************************************/
/*
开发日期: 2012-5-31 xiaopig
版本: 1.0
参数: 略
返回值: 略
功能描述: 从连接处理器池中返回一个处理器
注意: 略
*/
/************************************************************************/
CPigProactorAcceptHandler* CPigProactorAccept::make_handler (void)
{
return App_PigProactorAcceptHandlerManager::instance()->Create();
}
/************************************************************************/
/*
开发日期: 2012-5-31 xiaopig
版本: 1.0
参数:
const ACE_Asynch_Accept::Result& result: 连接消息
ACE_INET_Addr &remote: 客户端IP
const ACE_INET_Addr& local: 本地服务器IP
返回值: 略
功能描述: 判断新连接是否合法,不合法不进行连接,合法进行连接.
1)IP是否合法
2)连接数是否达到最大值
注意: 略
*/
/************************************************************************/
int CPigProactorAccept::validate_connection (const ACE_Asynch_Accept::Result& result,
const ACE_INET_Addr &remote,
const ACE_INET_Addr& local)
{
if(App_PigIPManager::instance()->CheckIP(remote.get_host_addr()) == false)
{
//在禁止列表中,不允许访问
return -1;
}
return 0;
}
|