接收连接basic_socket_acceptor
连接 socket 接收 Basic
2023-09-11 14:19:34 时间
概述
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
相关文章
- Docker 容器连接
- python通过socket实现多个连接并实现ssh功能详解
- 抓包分析SSL/TLS连接建立过程【总结】
- 连接Mysql提示Can’t connect to local MySQL server through socket的解决方法
- TCP的连接和释放过程
- 网络编程之手把手教你写基于TCP的Socket长连接
- 使用 Excel cdata addin 连接 SAP ABAP 系统时遇到错误消息 Unable to connect to SAP system
- paip.mysql 批量kill 连接.
- WebSocket连接里客户端和服务器端的Socket ID
- C# WinForm程序的App.Config数据库连接配置文件
- ASP.NET Web Forms - 数据库连接
- QT5.14.1+Win7 64+Oracle11gR2 Qt连接数据库
- Java通过socket和DTU,RTU连接工业传感器通信
- 阿里云 docker连接总报超时 registry.cn-hangzhou.aliyuncs.com (Client.Timeout exceeded while awaiting headers
- socket测试远程地址能否连接并为连接设置超时
- mac terminal ssh连接linux乱码问题
- AIX加入�能够telnet远程连接账号方法
- 合并多行查询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数
- DatagramSocket(邮递员):对应数据报的Socket概念,不需要创建两个socket,不可使用输入输出流。
- 使用socket方式连接Nginx优化php-fpm性能
- (原创) 使用pymongo 3.6.0连接MongoDB的正确姿势