C++网络编程(卷1):学习笔记(二)

ACE Socket Wrapper Facade 类:

外观模式的介绍很多,可参考wiki百科的说明,很容易理解。要是不理解还可以看看,阿牛讨媳妇MM拍照

image

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句柄

原文地址:https://www.cnblogs.com/westwind/p/2512367.html