??? 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 閱讀(3872)
評論(0) 編輯 收藏 引用 所屬分類:
ACE Farmeworks