概述

TCP有一处和UDP不同的地方是TCP是面向连接的,TCP有建立连接、通信、关闭连接的操作,Boost.Asio提供了ip::tcp::acceptor用来接收新的TCP连接,底层由socket_acceptor_service提供连接服务, basic_socket_acceptor作为连接接收类模板,当由acceptor获取到远程连接socket后,即可使用socket进行后续通信操作。

操作步骤

  1. 使用io_service构造acceptor
  2. 打开acceptor
  3. 设置选项[可选]
  4. 绑定监听端口
  5. 开始监听
  6. 同步/异步接收连接
  7. 关闭

操作说明

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的更多相关文章

  1. 关于完成端口IOCP异步接收连接函数AcceptEx注意事项

    AcceptEx方法有一个参数dwReceiveDataLength,指明了在收到连接后是否需要收到第一包数据才返回.需要注意的是,如果 dwReceiveDataLength=0,则当接收到一个连接 ...

  2. socket 异步接收连接和接收数据

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  3. SPDK发送和接收连接请求的处理

    因工作需要分析了部分SPDK代码,主要梳理login请求以及响应的处理,供参考. 参考代码——SPDK代码实现(以PLOGI为例): SPDK处理PLOGI分为三个阶段: 第一阶段通过一条GET_PA ...

  4. libevent (二) 接收TCP连接

    libevent 接收TCP连接 Evconnlistener 机制为您提供了侦听和接受传入的 TCP 连接的方法.下面的函数全部包含在`<event2/listener.h>`中. ev ...

  5. 抓到 Netty 一个 Bug,顺带来透彻地聊一下 Netty 是如何高效接收网络连接的

    本系列Netty源码解析文章基于 4.1.56.Final版本 对于一个高性能网络通讯框架来说,最最重要也是最核心的工作就是如何高效的接收客户端连接,这就好比我们开了一个饭店,那么迎接客人就是饭店最重 ...

  6. HTTP权威协议笔记-4.连接管理

    4.1 TCP连接 TCP为HTTP提供了一条可靠的比特传输管道,按顺序正确的传输,步骤如下: 浏览器解析主机名. 查询这个主机名的IP地址(DNS) 获得端口号. 浏览器对服务器该端口号发起连接. ...

  7. PHP+socket+SMTP、POP3协议发送、接收邮件

    .实现SMTP协议的类dsmtp.cls.php:<?php            , $webname=).);     } } .实现POP3协议的类dpop3.cls.php: <? ...

  8. 连接无线设备——与Wi-Fi直接连接

    原文链接:http://developer.android.com/intl/zh-CN/training/connect-devices-wirelessly/wifi-direct.html 目录 ...

  9. 网络IPC:套接字之建立连接

    如果处理的是面向连接的网络服务(SOCK_STREAM或SOCK_SEQPACKET),在开始交换数据以前,需要在请求服务的进程套接字(客户端)和提供服务的进程套接字(服务器)之间建立一个连接.客户端 ...

随机推荐

  1. pip 安装包提速

    豆瓣源 pip3 install 第三方库名 -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com

  2. SQL server学习(一)数据库的基本知识、基本操作和基本语法

    在软件测试中,数据库是必备知识,假期闲里偷忙,整理了一点学习笔记,共同探讨. 阅读目录 基本知识 数据库发展史 数据库名词 SQL组成 基本操作 登录数据库操作 数据库远程连接操作 数据库分离操作 数 ...

  3. ubantu18.04下Hadoop安装与伪分布式配置

    1  下载 下载地址:http://mirror.bit.edu.cn/apache/hadoop/common/stable2/ 2 解压 将文件解压到 /usr/local/hadoop cd ~ ...

  4. Linux文件的所有权与权限

    要了解Linux的权限,需要和Linux的用户与组的概念一并理解,不了解的同学请参考Linux的用户和组 简介 在Linux中,每个文件除了有用户和组的信息以外,还有其对应的权限.可使用来查看. [r ...

  5. 暴力探测蓝牙设备工具redfang

    暴力探测蓝牙设备工具redfang   根据是否可以被扫描到,蓝牙设备具有可见(Disoverable)和不可见(non discoverable)两种模式.为了扫描不可见蓝牙设备,Kali Linu ...

  6. android的AsyncTask.get()方法会阻塞UI线程

    AsyncTask.get()方法, 是有阻塞UI的能力的.

  7. Codeforces Round #374 (Div. 2) D. Maxim and Array 贪心

    D. Maxim and Array 题目连接: http://codeforces.com/contest/721/problem/D Description Recently Maxim has ...

  8. SecureCRT发送心跳机制保持SSH在线(解决阿里云ECS)

    设置如下:

  9. KrakenD: API Gateway and Manager

    KrakenD: API Gateway and Manager http://www.krakend.io/

  10. [Winform]基于Emgu.CV人脸识别

    摘要 “OpenCV是一个开源的计算机视觉库.OpenCV采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上.OpenCV还提供了Python.Ruby.MATLAB以及 ...