codecamp

Boost.Asio c++ 网络编程翻译(8)

名字                         TCP                 UDP                 ICMP
async_read_some              是                  -                   -
async_receive_from           -                   是                  是
async_write_some             是                  -                   -
async_send_to                -                   是                  是
read_some                    是                  -                   -
receive_from                 -                   是                  是
write_some                   是                  -                   -
send_to                      -                   是                  是

其他方法
其他与连接和I/O无关的函数如下:
local_endpoint():这个方法返回套接字本地连接的地址。
remote_endpoint():这个方法返回套接字连接到的远程地址。
native_handle():这个方法返回原始套接字的处理程序。你只有在调用一个Boost.Asio不支持的原始方法时才需要用到它
non_blocking():如果套接字是非阻塞的,这个方法返回true,否则false
native_non_blocking():如果套接字是非阻塞的,这个方法返回true,否则返回false。但是,它是基于原生的套接字来调用本地的api。所以通常来说,你不需要调用这个方法(non_blocking()已经缓存了这个结果);你只有在直接调用native_handle()这个方法的时候猜需要使用到这个方法
at_mark():如果套接字要读的是一段OOB数据,这个方法返回true。这个方法你很少会用到

其他的考虑
最后要注意,一个套接字实例不能被拷贝,因为拷贝构造方法和=操作符是不可访问的。
ip::tcp::socket s1(service), s2(service);
   s1 = s2; // 编译时报错
   ip::tcp::socket s3(s1); // 编译时报错
这是非常有意义的,因为每一个实例都拥有并管理着一个资源(原生套接字本身)。如果我们允许拷贝构造,结果是我们会有两个实例拥有同样的原生套接字;这样我们就需要去处理所有者的问题(让一个实例拥有所有权?或者使用引用计数?还是其他的方法)Boost.Asio选择不允许拷贝(如果你想要创建一个备份,请使用共享指针)
typedef boost::shared_ptr<ip::tcp::socket> socket_ptr;
   socket_ptr sock1(new ip::tcp::socket(service));
   socket_ptr sock2(sock1); // ok
   socket_ptr sock3;			
   sock3 = sock1; // ok
套接字缓冲区
当从一个套接字读写内容时,你需要一个缓冲区,用来保存读入和写出的数据。缓冲区内存的有效时间必须比I/O操作的时间要长;你需要保证它们在I/O操作结束之前不被释放。
对于同步操作来说,这很容易;当然,这个缓冲区在receive和send时都存在。
Boost.Asio c++ 网络编程翻译(7)
Boost.Asio c++ 网络编程翻译(9)
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }