找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3533|回复: 1

使用ACE Reactor框架处理事件及多个I/O流源代码 报错

[复制链接]
发表于 2009-6-7 17:53:45 | 显示全部楼层 |阅读模式
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         
  
  
怎么调都不对麻烦大家看看
发表于 2009-6-8 15:12:49 | 显示全部楼层
ACE_SOCK_Acceptor
包含:
#include <SOCK_Acceptor.h>
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-12-23 17:53 , Processed in 0.029966 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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