ACE Socket Wrapper Facade 类:
外观模式的介绍很多,可参考wiki百科的说明,很容易理解。要是不理解还可以看看,阿牛讨媳妇和MM拍照
ACE_Addr ACE”网络地址”继承结构的根
ACE_INET_Addr 主要提供了以下方法:
ACE_INET_Addr() 通过主机名、IP地址和端口号初始化ACE_INET_Addr
string_to_addr() 字符串转为ACE_INET_Addr
addr_to_string() 将ACE_INET_Addr转换为字符串
get_port_number() 以主机字节序返回端口
get_host_name() 返回主机名
避免遗漏:
1.将底层sockaddr_in中所有字节初始化为0;
2.将端口号和IP地址转换为网络字节序
ACE_IPC_SAP (抽象类) ACE IPC wrapper facade继承结构的根,为其他ACE wrapper facade提供了基本的I/O句柄操作能力
enable() 启用或禁止各种I/O句柄选项。例如,启用/禁止“非阻塞”I/O
disable()
set_handle() 设置或得到底层句柄I/O
get_handle()
解决I/O句柄的可移植性问题:
1.提供了ACE_HANDLE类型定义,在每个OS平台上指定合适的句柄类型
2.定义了可移植的ACE_INVALID_HANDLE宏,应用程序可用来检测错误
ACE_SOCK (抽象类) ACE Socket wrapper facade继承结构的根。
open() 创建和销毁一个socket通信端点
close()
set_local_addr() 分别返回本地和远程对端的地址
get_remote_addr()
set_option() 设置和读取socket选项
get_option()
可以避免:
1.将ACE_SOCK_Stream作为值传递或者复制给别的对象
ACE_SOCK_Connector 工厂,用来主动建立一个新的连接
connect() 通过“阻塞”、“非阻塞”或“定时”模式之一,主动连接某一网络地址上的ACE_SOCK_Stream
complete() 结束一个“非阻塞”连接并初始化一个ACE_SOCK_Stream
只展示用于“主动建立连接”的方法,从而防止了对它的意外误用
为简化IPC类和相关地址类的批量替换,ACE Socket wrapper facade定义了traits(特征类)。这是一种C++泛型技术,用来定义和结合一组特征,以改变模板类的行为
可重入
ACE_SOCK_IO
ACE_SOCK_Stream 其实例在ACE_SOCK_Acceptor或ACE_SOCK_Connector”工厂"中初始化
send() 发送、接收数据缓冲区数据。读、写的字节数可能比请求的字节数少
recv()
send_n() 发送、接收恰好N个字节的缓冲区数据
recv_n()
recvv_n() 使用OS的“分散读取”系统函数
sendv_n() 使用OS的“集中写入”系统函数
如果要禁用Nagle算法,可以调用peer.set_option(),并使用TCP_NODELAY标志,强制TCP尽快将报文发送出去
ACE_SOCK_Acceptor 工厂,用来被动地建立一个新的通信端点
open() 初始化"被动模式 ”、"工厂"socket,被动侦听一个指定的ACE_INET_Addr地址
accept() 通过一个新接受的客户连接初始化ACE_SOCK_Stream参数
避免:
1.ACE_SOCK_Acceptor的open()方法总是以正确的顺序调用socket()、bind()和listen()函数
2.这些函数所调用的socket句柄,只会是那些已经被"被动模式"socket句柄工厂初始化了的socket句柄