课一:基础Asio流程

一、同步操作过程:

Your program will have at least one io_service object. The io_service represents your program‘s link to the operating system‘s I/O services.

asio::io_service io_service;

To perform I/O operations your program will need an I/O object such as a TCP socket:

asio::ip::tcp::socket socket(io_service);

When a synchronous connect operation is performed, the following sequence of events occurs:

1. Your program initiates the connect operation by calling the I/O object:

socket.connect(server_endpoint);

2. The I/O object forwards the request to the io_service.

3. The io_service calls on the operating system to perform the connect operation.

4. The operating system returns the result of the operation to the io_service.

5. The io_service translates any error resulting from the operation into an object of typeasio::error_code. An error_code may be compared with specific values, or tested as a boolean (where afalse result means that no error occurred). The result is then forwarded back up to the I/O object.

6. The I/O object throws an exception of type asio::system_error if the operation failed. If the code to initiate the operation had instead been written as:

asio::error_code ec;
socket.connect(server_endpoint, ec);

then the error_code variable ec would be set to the result of the operation, and no exception would be thrown.

二、异步操作过程:

1. Your program initiates the connect operation by calling the I/O object:

socket.async_connect(server_endpoint, your_completion_handler);

where your_completion_handler is a function or function object with the signature:

void your_completion_handler(const asio::error_code& ec);

The exact signature required depends on the asynchronous operation being performed. The reference documentation indicates the appropriate form for each operation.

2. The I/O object forwards the request to the io_service.

3. The io_service signals to the operating system that it should start an asynchronous connect.

Time passes. (In the synchronous case this wait would have been contained entirely within the duration of the connect operation.)

4. The operating system indicates that the connect operation has completed by placing the result on a queue, ready to be picked up by the io_service.

5. Your program must make a call to io_service::run() (or to one of the similar io_service member functions) in order for the result to be retrieved. A call to io_service::run() blocks while there are unfinished asynchronous operations, so you would typically call it as soon as you have started your first asynchronous operation.

6. While inside the call to io_service::run(), the io_service dequeues the result of the operation, translates it into an error_code, and then passes it to your completion handler.

This is a simplified picture of how Asio operates. You will want to delve further into the documentation if your needs are more advanced, such as extending Asio to perform other types of asynchronous operations.

时间: 2024-10-03 23:06:55

课一:基础Asio流程的相关文章

KALI LINUX WEB 渗透测试视频教程—第十九课-METASPLOIT基础

原文链接:Kali Linux Web渗透测试视频教程—第十九课-metasploit基础 文/玄魂 目录 Kali Linux Web 渗透测试视频教程—第十九课-metasploit基础...................... 1 metasploit..................................................................................................... 1 基本体系结构..........

【Android开发学习笔记】【第四课】基础控件的学习

通过一个简单的例子来学习下面几种控件: 1.TextView:简单的文本显示控件 2.EditText:可以编辑的文本框 3.Button:按钮 4.Menu:这里指的是系统的Menu 5.Toast:消息提示控件,类似于MFc的tip(不知道理解的对不对) 顺便用到上一次学习的多个Activity之间传递数据的技术,来做一个小的计算乘法的case 步骤: (1)主Activity 和显示结果的 Activity 都采用线性布局,下面是布局文件的源代码: <LinearLayout xmlns:

2.6-Java语言基础(程序流程控制)

判断结构 选择结构 循环结构 2.6.1  判断结构 if语句 三种格式: 1.  if(条件表达式) { 执行语句: } 2.  if(条件表达式) { 执行语句: } else { 执行语句: } 3. if(条件表达式) { 执行语句: } else if (条件表达式) { 执行语句: } -- else { 执行语句: } if语句特点: a,每一种格式都是单条语句. b,第二种格式与三元运算符的区别:三元运算符运算完要有值出现.好处是:可以写在其他表达式中. c,条件表达式无论写成什

Python基础-Python流程控制

上篇文章 Python基础-基础使用 我们已经知道了Python解释器,Python的变量.和Python的输入输出.Python的注释和字符集,这篇文章,我们主要讲Python的流程控制 本文防盗链:http://python789.blog.51cto.com Python基础-Python流程控制 1.条件判断 1.1.if基本使用 if就是一个条件判断的,当满足不同样的条件的时候执行不同的操作,如法如下: if 条件1:     满足条件1 代码框 elif 添加2:     满足条件2

Linux运维第七课----Linux基础优化

一.find找出文件,并替换文件内容[[email protected] ~/data]# find /root/data/ -type f -name '.txt' ./oldboy.txt./acheng.txt./magua.txt./op.txt1.方法一 [[email protected] ~/data]# find /root/data/ -type f -name '.txt' -exec sed -i 's#sh#hs#g'[[email protected] ~/data]#

Python第十八课(面向对象基础)

Python第17课(面向对象基础)    >>>思维导图>>>中二青年 什么是继承? 继承是一种关系,描述两个对象之间,什么是什么的关系 例如麦兜,佩奇,猪刚鬣 都是猪啊, 在程序中,继承描述的是类和类之间的关系 例如a继承了b, a就能直接使用b已经存在的方法和属性 a称之为子类,b称之为父类,也称之为基类 为什么要使用继承 继承的一方可以直接使用被继承一方已经有的东西 其目的是为了重用已经有的代码,提高重用性 如何使用继承 语法 class 类名称(父类的名称):

Jquery第二课 Javascript基础

基础知识 网页由三个部分组成:HTML.CSS和JavaScript.它们分别完成不同的功能,其中HTML描述页面内容.CSS负责内容的展示.JavaScript添加交互功能和动态效果.三者一起组成一个完整的Web页面. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>长沙戴维营教育jQuery教程 第二课</title> <!-- CS

python基础之流程控制

python流程控制 python的流程控制跟大多数的语言一样,包括if条件语句.for循环语句.while循环语句:跳出循环continue,break等 写在前面 python中的运算 1)算数运算 以下假设变量:a=10,b=20: 2)比较运算 3)赋值运算 4)位运算 以下假设变量:a=60,b=13,对应二进制为a=0011 1100:b=0000 1101: 5)逻辑运算 Python语言支持逻辑运算符,以下假设变量 a 为 10, b为 20: 6)成员运算,身份运算 除了以上的

java编程入门6 java语言基础与流程控制

语言基础 基本数据类型 1.整数类型 1)不能以0作为十进制数的开头(0除外) 2)八进制必须以0开头 3)十六进制必须以0X或0x开头 4)整型数据类型根据它所占内存大小的不同,可分为byte.short.int和long4中类型 数据类型 内存空间(8位比特位等于1字节) 取值范围 byte 8位 -2^7~2^7-1 short 16位 -2^15~2^15-1 int 32位 -2^31~2^31-1 long 64位 -2^63~2^63-1 5)若赋给的值大于int型的最大值或小于i