程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> ACE中Socket IPC通訊包裝類族

ACE中Socket IPC通訊包裝類族

編輯:關於VC++

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

以上的類結構是簡化的,以突出重點功能。要完全了解每個類,看源代碼。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved