ACE IPC 通讯包装类族

本文介绍了ACE库中的关键网络编程类,包括ACE_IPC_SAP、ACE_SOCK、ACE_SOCK_IO、ACE_SOCK_Stream、ACE_SOCK_Acceptor和ACE_SOCK_Connector。这些类为Socket通信提供了丰富的功能,如句柄管理、数据收发、连接管理和阻塞/非阻塞I/O操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

o_ACE IPC.jpg

 

http://www.cppblog.com/walkspeed/archive/2007/02/24/18942.html

 

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);
};

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值