class ClientAcceptor : public ACE_Event_Handler
{
public:
virtual ~ClientAcceptor(void)
{
this->handle_close(ACE_INVALID_HANDLE, 0);
}
int open(const ACE_INET_Addr& listen_addr)
{
if (this->acceptor_.open(listen_addr, 1) == -1)
ACE_ERROR_RETURN((LM_ERROR,
ACE_TEXT("%p\n"),
ACE_TEXT("acceptor.open")),
-1);
//针对接受事件向反应器登记
return this->reactor()->register_handler(this, ACE_Event_Handler::ACCEPT_MASK);
}
protected:
ACE_SOCK_Acceptor acceptor_;
public:
// Get this handler's I/O handle.
virtual ACE_HANDLE get_handle(void) const
{
return this->acceptor_.get_handle();
}
// Called when a connection is ready to accept.
virtual int handle_input(ACE_HANDLE fd)
{
//ClientService* client;
//ACE_NEW_RETURN(client, ClientService, -1);
ClientService *client = new ClientService();
auto_ptr<ClientService> p(client);//这个auto_ptr应该具有引用计数的功能
if (this->acceptor_.accept(client->peer()) == -1)
return -1;
p.release();
client->reactor(this->reactor());
if (client->open() == -1)
client->handle_close(ACE_INVALID_HANDLE, 0);
return 0;
}
// Called when this handler is removed from the ACE_Reactor.
virtual int handle_close(ACE_HANDLE handle, ACE_Reactor_Mask close_mask)
{
if (this->acceptor_.get_handle() != ACE_INVALID_HANDLE)
{
ACE_Reactor_Mask m = ACE_Event_Handler::ACCEPT_MASK | ACE_Event_Handler::DONT_CALL;
this->reactor()->remove_handler(this, m);
this->acceptor_.close();
}
return 0;
}
};
原帖在http://blog.csdn.net/bingozq/archive/2008/03/27/2222417.aspx
报的错有:
错误 1 error C2146: 语法错误 : 缺少“;”(在标识符“acceptor_”的前面) d:\我的文档\桌面\dfg\dfg\df.cpp 21
错误 2 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int d:\我的文档\桌面\dfg\dfg\df.cpp 21
错误 3 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int d:\我的文档\桌面\dfg\dfg\df.cpp 21
错误 4 error C2039: “acceptor_”: 不是“ClientAcceptor”的成员 d:\我的文档\桌面\dfg\dfg\df.cpp 28
错误 5 error C2228: “.open”的左边必须有类/结构/联合 d:\我的文档\桌面\dfg\dfg\df.cpp 28
错误 6 error C2039: “acceptor_”: 不是“ClientAcceptor”的成员 d:\我的文档\桌面\dfg\dfg\df.cpp 41
错误 7 error C2228: “.get_handle”的左边必须有类/结构/联合 d:\我的文档\桌面\dfg\dfg\df.cpp 41
错误 8 error C2065: “ClientService”: 未声明的标识符 d:\我的文档\桌面\dfg\dfg\df.cpp 48
错误 9 error C2065: “client”: 未声明的标识符 d:\我的文档\桌面\dfg\dfg\df.cpp 48
错误 10 error C2061: 语法错误 : 标识符“ClientService” d:\我的文档\桌面\dfg\dfg\df.cpp 48
错误 11 error C2065: “auto_ptr”: 未声明的标识符 d:\我的文档\桌面\dfg\dfg\df.cpp 49
错误 12 error C3861: “p”: 找不到标识符 d:\我的文档\桌面\dfg\dfg\df.cpp 49
错误 13 error C2039: “acceptor_”: 不是“ClientAcceptor”的成员 d:\我的文档\桌面\dfg\dfg\df.cpp 51
错误 14 error C2228: “.accept”的左边必须有类/结构/联合 d:\我的文档\桌面\dfg\dfg\df.cpp 51
错误 15 error C2227: “->peer”的左边必须指向类/结构/联合/泛型类型 d:\我的文档\桌面\dfg\dfg\df.cpp 51
错误 16 error C2228: “.release”的左边必须有类/结构/联合 d:\我的文档\桌面\dfg\dfg\df.cpp 53
错误 17 error C2227: “->reactor”的左边必须指向类/结构/联合/泛型类型 d:\我的文档\桌面\dfg\dfg\df.cpp 54
错误 18 error C2227: “->open”的左边必须指向类/结构/联合/泛型类型 d:\我的文档\桌面\dfg\dfg\df.cpp 55
错误 19 error C2227: “->handle_close”的左边必须指向类/结构/联合/泛型类型 d:\我的文档\桌面\dfg\dfg\df.cpp 56
错误 20 error C2039: “acceptor_”: 不是“ClientAcceptor”的成员 d:\我的文档\桌面\dfg\dfg\df.cpp 62
错误 21 error C2228: “.get_handle”的左边必须有类/结构/联合 d:\我的文档\桌面\dfg\dfg\df.cpp 62
错误 22 error C2039: “acceptor_”: 不是“ClientAcceptor”的成员 d:\我的文档\桌面\dfg\dfg\df.cpp 66
错误 23 error C2228: “.close”的左边必须有类/结构/联合 d:\我的文档\桌面\dfg\dfg\df.cpp 66
怎么调都不对麻烦大家看看 |