接收连接basic_socket_acceptor
概述
TCP有一处和UDP不同的地方是TCP是面向连接的,TCP有建立连接、通信、关闭连接的操作,Boost.Asio提供了ip::tcp::acceptor用来接收新的TCP连接,底层由socket_acceptor_service提供连接服务, basic_socket_acceptor作为连接接收类模板,当由acceptor获取到远程连接socket后,即可使用socket进行后续通信操作。
操作步骤
- 使用io_service构造acceptor
- 打开acceptor
- 设置选项[可选]
- 绑定监听端口
- 开始监听
- 同步/异步接收连接
- 关闭
操作说明
basic_socket_acceptor针对每个步骤都提供了相应的方法,同时也提供了一些构造函数可以直接合并几个步骤的操作;
| 方法名 | 说明 | 
|---|---|
| open | 打开acceptor | 
| is_open | 是否已打开 | 
| bind | 绑定到指定端口,端口应该为本地端口 | 
| listen | 监听指定端口 | 
| close | 关闭acceptor,任何异步accept会被立即取消,再次使用必须再调用open | 
| cancel | 取消acceptor上的异步操作,会引起异步连接、发送、接收操作的立即完成,错误码为error::operation_aborted | 
| set_option | 设置选项 | 
| get_option | 获取选项 | 
| accept | 同步连接获取 | 
| async_accept | 异步连接获取 | 
使用方法
通常情况下,如果在构造时指定要绑定的本地端口,即可直接进行accept操作,譬如:
tcp::accptor acceptor(io_service,endpoint,reuse_addr);
acceptor.accept(socket,ec);
如果构造时没有提供本地端口,则需要进行打开、绑定、监听等动作之后才可以进行accept操作,譬如:
tcp::acceptor acceptor(io_service); acceptor.open(endpoint.protocol()); if (reuse_addr) acceptor.set_option(socket_base::reuse_address(true)); acceptor.bind(endpoint); acceptor.listen(listen_backlog); acceptor.accept(socket,ec);
转自:https://www.jianshu.com/p/ff55ca69b943
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号