posts - 58,  comments - 75,  trackbacks - 0

o_ACE IPC.jpg

    ACE_IPC_SAP类是IPC类族的基类,封装了句柄,提供了访问句柄的基本接口,基本结构
如下
class ACE_IPC_SAP
{
public:
  int enable (int value) const;
  int disable (int value) const;

  ACE_HANDLE get_handle (void) const;
  void set_handle (ACE_HANDLE handle);

protected:
  ACE_IPC_SAP (void);
  ~ACE_IPC_SAP (void);

private:
  ACE_HANDLE handle_;
};

    ACE_SOCK类是使用Socket的基类,所有使用Socket通讯的类都从这个类派生。本类的功
能包括
    1 创建和销毁Socket句柄
    2 获取本地和远端的网络地址
    3 设置和读取Socket选项。
基本结构如下
class ACE_SOCK : public ACE_IPC_SAP
{
public:
  //设置Socket的属性,包装了setsockopt系统函数
  int set_option (int level,
                  int option,
                  void *optval,
                  int optlen) const;
  //获取Socket的属性,包装了getsockopt系统函数
  int get_option (int level,
                  int option,
                  void *optval,
                  int *optlen) const;
  //获得本地地址
  int get_local_addr (ACE_Addr &) const;
  //获取远端地址
  int get_remote_addr (ACE_Addr &) const;
  //关闭Socket
  int close (void);
  //打开一个Socket,没有Qos
  int open (int type,
            int protocol_family,
            int protocol,
            int reuse_addr);
  //打开一个Socket,有Qos
  int open (int type,
            int protocol_family,
            int protocol,
            ACE_Protocol_Info *protocolinfo,
            ACE_SOCK_GROUP g,
            u_long flags,
            int reuse_addr);

protected:
  ACE_SOCK (int type,
            int protocol_family,
            int protocol = 0,
            int reuse_addr = 0);
  ACE_SOCK (int type,
            int protocol_family,
            int protocol,
            ACE_Protocol_Info *protocolinfo,
            ACE_SOCK_GROUP g,
            u_long flags,
            int reuse_addr);
  ACE_SOCK (void);
  ~ACE_SOCK (void);
};

    ACE_SOCK_IO类,包装了Socket数据通讯的基本方法。本类提供的功能
    1 支持数据的发送和接收
    2 支持分散读操作
    3 支持集中写操作
    4 支持阻塞,非阻塞,定时 I/O操作
基本结构如下
class ACE_SOCK_IO : public ACE_SOCK
{
public:
  ACE_SOCK_IO (void);
  ~ACE_SOCK_IO (void);

  //接收数据
  ssize_t recv (void *buf,
                size_t n,
                const ACE_Time_Value *timeout = 0) const;
  //分散读操作
  ssize_t recv (iovec iov[],
                size_t n,
                const ACE_Time_Value *timeout = 0) const;
  //发送数据             
  ssize_t send (const void *buf,
                size_t n,
                const ACE_Time_Value *timeout = 0) const;
  //集中写操作
  ssize_t send (const iovec iov[],
                size_t n,
                const ACE_Time_Value *timeout = 0) const;
};

    ACE_SOCK_Stream类,继承ACE_SOCK_IO类。在ACE_SOCK_IO类提供的功能上,添加了发送
和接收刚好n个字节的能力。基本结构如下
class ACE_Export ACE_SOCK_Stream : public ACE_SOCK_IO
{
public:
  ACE_SOCK_Stream (void);
  ACE_SOCK_Stream (ACE_HANDLE h);
  ~ACE_SOCK_Stream (void);
 
  //刚好读取n个字节的数据
  ssize_t recv_n (void *buf,
                  size_t len,
                  const ACE_Time_Value *timeout = 0,
                  size_t *bytes_transferred = 0) const;
  //分散读刚好n个字节操作
  ssize_t recvv_n (iovec iov[],
                   int iovcnt,
                   const ACE_Time_Value *timeout = 0,
                   size_t *bytes_transferred = 0) const;
  //刚好发送n个字节的数据
  ssize_t send_n (const void *buf,
                  size_t len,
                  const ACE_Time_Value *timeout = 0,
                  size_t *bytes_transferred = 0) const;
  //集中写刚好n个字节操作
  ssize_t sendv_n (const iovec iov[],
                   int iovcnt,
                   const ACE_Time_Value *timeout = 0,
                   size_t *bytes_transferred = 0) const;

  int close_reader (void);
  int close_writer (void);

  int close (void);

  typedef ACE_INET_Addr PEER_ADDR;
};

    ACE_SOCK_Acceptor类是一个工厂类,用来被动产生一个新的通讯端点。提供如下能力
    1 接收对等端的连接
    2 连接可以通过阻塞、非阻塞或定时方式接受。
基本结构如下
class ACE_Export ACE_SOCK_Acceptor : public ACE_SOCK
{
public:

  ACE_SOCK_Acceptor (void);
  ACE_SOCK_Acceptor (const ACE_Addr &local_sap,
                     int reuse_addr = 0,
                     int protocol_family = PF_UNSPEC,
                     int backlog = ACE_DEFAULT_BACKLOG,
                     int protocol = 0);
  ~ACE_SOCK_Acceptor (void);

  //打开一个监听
  int open (const ACE_Addr &local_sap,
            int reuse_addr = 0,
            int protocol_family = PF_UNSPEC,
            int backlog = ACE_DEFAULT_BACKLOG,
            int protocol = 0);

  int close (void);
  //接受一个对等端的连接,产生一个通讯
  int accept (ACE_SOCK_Stream &new_stream,
              ACE_Addr *remote_addr = 0,
              ACE_Time_Value *timeout = 0,
              int restart = 1,
              int reset_new_handle = 0) const;
};

    ACE_SOCK_Connector类是一个工厂类,用来主动建立一个新的通讯端。提供的功能如下
    1 发起一个到对等接受者的连接,并在连接后产生一个通讯对象
    2 连接可以通过阻塞、非阻塞或定时方式发起
基本结构如下
class ACE_SOCK_Connector
{
public:
  ACE_SOCK_Connector (void);
  ACE_SOCK_Connector (ACE_SOCK_Stream &new_stream,
                      const ACE_Addr &remote_sap,
                      const ACE_Time_Value *timeout = 0,
                      const ACE_Addr &local_sap = ACE_Addr::sap_any,
                      int reuse_addr = 0,
                      int flags = 0,
                      int perms = 0,
                      int protocol = 0);

  //发起一个连接
  int connect (ACE_SOCK_Stream &new_stream,
               const ACE_Addr &remote_sap,
               const ACE_Time_Value *timeout = 0,
               const ACE_Addr &local_sap = ACE_Addr::sap_any,
               int reuse_addr = 0,
               int flags = 0,
               int perms = 0,
               int protocol = 0);

  ~ACE_SOCK_Connector (void);

  int complete (ACE_SOCK_Stream &new_stream,
                ACE_Addr *remote_sap = 0,
                const ACE_Time_Value *timeout = 0);
};

    以上的类结构是简化的,以突出重点功能。要完全了解每个类,看源代码。

posted on 2007-02-24 14:15 walkspeed 阅读(3812) 评论(0)  编辑 收藏 引用 所属分类: ACE Farmeworks

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2007年2月>
28293031123
45678910
11121314151617
18192021222324
25262728123
45678910

常用链接

留言簿(4)

随笔分类(64)

随笔档案(58)

文章分类(3)

文章档案(3)

相册

收藏夹(9)

C++零碎

好友

搜索

  •  

积分与排名

  • 积分 - 157879
  • 排名 - 163

最新评论

阅读排行榜

评论排行榜