接收连接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
接收连接basic_socket_acceptor的更多相关文章
- 关于完成端口IOCP异步接收连接函数AcceptEx注意事项
AcceptEx方法有一个参数dwReceiveDataLength,指明了在收到连接后是否需要收到第一包数据才返回.需要注意的是,如果 dwReceiveDataLength=0,则当接收到一个连接 ...
- socket 异步接收连接和接收数据
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- SPDK发送和接收连接请求的处理
因工作需要分析了部分SPDK代码,主要梳理login请求以及响应的处理,供参考. 参考代码——SPDK代码实现(以PLOGI为例): SPDK处理PLOGI分为三个阶段: 第一阶段通过一条GET_PA ...
- libevent (二) 接收TCP连接
libevent 接收TCP连接 Evconnlistener 机制为您提供了侦听和接受传入的 TCP 连接的方法.下面的函数全部包含在`<event2/listener.h>`中. ev ...
- 抓到 Netty 一个 Bug,顺带来透彻地聊一下 Netty 是如何高效接收网络连接的
本系列Netty源码解析文章基于 4.1.56.Final版本 对于一个高性能网络通讯框架来说,最最重要也是最核心的工作就是如何高效的接收客户端连接,这就好比我们开了一个饭店,那么迎接客人就是饭店最重 ...
- HTTP权威协议笔记-4.连接管理
4.1 TCP连接 TCP为HTTP提供了一条可靠的比特传输管道,按顺序正确的传输,步骤如下: 浏览器解析主机名. 查询这个主机名的IP地址(DNS) 获得端口号. 浏览器对服务器该端口号发起连接. ...
- PHP+socket+SMTP、POP3协议发送、接收邮件
.实现SMTP协议的类dsmtp.cls.php:<?php , $webname=).); } } .实现POP3协议的类dpop3.cls.php: <? ...
- 连接无线设备——与Wi-Fi直接连接
原文链接:http://developer.android.com/intl/zh-CN/training/connect-devices-wirelessly/wifi-direct.html 目录 ...
- 网络IPC:套接字之建立连接
如果处理的是面向连接的网络服务(SOCK_STREAM或SOCK_SEQPACKET),在开始交换数据以前,需要在请求服务的进程套接字(客户端)和提供服务的进程套接字(服务器)之间建立一个连接.客户端 ...
随机推荐
- csp刷题
title: csp刷题 date: 2018-12-13 16:41:33 tags: --- Markdown 在第7个点挂了,,,不改了,,,太恶心了这种题QAQ,,,, 有谁想改的改完了告诉我 ...
- JFreeChart 之饼图
JFreeChart 之饼图 一.JFreeChart 简介 JFreeChart是JAVA平台上的一个开放的图表绘制类库.它完全使用JAVA语言编写,是为applications, applets, ...
- 【莫队算法】【权值分块】bzoj3920 Yuuna的礼物
[算法一] 暴力. 可以通过第0.1号测试点. 预计得分:20分. [算法二] 经典问题:区间众数,数据范围也不是很大,因此我们可以: ①分块,离散化,预处理出: <1>前i块中x出现的次 ...
- BZOJ2888 : 资源运输
显然资源集合处就是树的重心,这题需要动态维护树的重心. 每个连通块以重心为根,用link-cut tree维护每个点的子树大小以及子树内所有点到它的距离和. 合并两个连通块时,考虑启发式合并,暴力往大 ...
- JDK版本的特性
1. 2.JDK1.5增加的是: (1) 泛型与枚举类型(枚举类型是静态,常量.里面也可以包含构造方法,成员方法,但是构造方法一定是私有的. 适合枚举的是 有限数据,封装特定的数据,), (2)注解( ...
- Linux学习笔记08—如何关闭防火墙
Linux系统下面自带了防火墙iptables,iptables可以设置很多安全规则.但是如果配置错误很容易导致各种网络问题,那么如果要关闭禁用防火墙怎么操作呢,咗嚛本经验以centos系统为例演示如 ...
- j.u.c系列(07)---之读写锁:ReentrantReadWriteLock
写在前面 重入锁ReentrantLock是排他锁,排他锁在同一时刻仅有一个线程可以进行访问,但是在大多数场景下,大部分时间都是提供读服务,而写服务占有的时间较少.然而读服务不存在数据竞争问题,如果一 ...
- 针对MyISAM锁表的解决方案
最近服务器上经常出现mysql进程占CPU100%的情况,使用show processlist命令后,看到出现了很多状态为LOCKED的sql.使用show status like 'table%'检 ...
- webdings 和 wingdings 字体
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- C#后台调用LPT1端口实现小票机打印方法。
public class POSPrinter { const int OPEN_EXISTING = 3; string prnPort = "LPT1"; [DllImport ...