三次握手过程中 TCP 的状态变化 三次握手的过程和本质 三种状态 socket 函数 listen 函数 connect 函数 accept 函数 值-结果参数 connect 函数在三次握手中的返回情况 总结一下近日所学的关于 TCP 建立连接 三次握手 的过程中, TCP 的 状态变化, 以及在这个过程中所用的 socket 函数, 对于各种情况会如何处理 涉及到 connect listen accept 函数 三次握手过程中 TCP 的状态变化 三次握手的过程和本质 如下图, 是一个 TCP 建立和断开连接的过程, 我们今天只讨论建立连接的三次握手过程 主动申请连接的一方(通常为客户端), 发送一个 SYN 报文段, 服务器在收到客户端发来的 SYN 报文段后, 回复一个 SYN 报文段, 并发送一个 ACK 以确认客户端的 SYN, 为了确认服务器的 SYN, 客户端也会回复一个 ACK 经 继续阅读 >>


吕子健 18/09/04 14:58:46
终端输入 sudo netease-cloud-music 但是这意味着终端不能关闭, 而且每次都要这样实在是麻烦, 发现是 sudo, 那肯定是权限问题了, 所以只要更改网易云的执行权限就好了 打开 /usr/share/applications 目录, 在下面找到网易云 ( netease-cloud-music.desktop ) 更改其执行权限sudo chmod 777 netease-cloud-music.desktop (每个人都有读和写以及执行的权限) 重启 OK了 作者:weixin_36888577 发表于 2018/08/20 11:28:51 原文链接 https://blog.csdn.net/weixin_36888577/article/details/81868462 继续阅读 >>


吕子健 18/08/20 11:28:51
特点 Linux 内核于内核2.6.25提供了一种创建定时器的 API, 那就是 Linux 特有的 timerfd API, 并且该定时器可以从文件描述符中读取其创建的定时器到期通知. 这也意味着, 可以将文件描述符通过多路复用监听并读取, 而其他的定时器想要将一个 (或多个) 定时器与一组文件描述符放在一起同时监听可不是一件容易的事. 函数接口 timerfd 系列 API 有三个系统调用 : 第一个系统调用, 该系统调用创建一个新的定时器对象 : #include <sys/timerfd.h> int timerfd_create(int clockid, int flags); //成功返回一个指代该对象的文件描述符, 失败返回-1及errno 第一个参数 clockid 可以设置为 CLOCK_REALTIME 和 CLOCK_MONOTONIC CLOCK_REALTIME 可设定的系统级实时时钟. 相对时间,从1970. 继续阅读 >>


吕子健 18/08/10 22:26:11
下载最新 wps 安装包 官网下载 下载 libpng12-0_1.2.54-1ubuntu1_amd64.deb 下载字体wps-office-fonts_1.0_all.deb 执行命令 sudo dpkg -i libpng12-0_1.2.54-1ubuntu1_amd64.deb 执行命令 sudo dpkg -i wps-office_10.1.0.5707~a21_amd-64.deb 执行命令 sudo dpkg -i wps-office-fonts_1.0_all.deb ok了 作者:weixin_36888577 发表于 2018/08/07 21:23:00 原文链接 https://blog.csdn.net/weixin_36888577/article/details/81488861 继续阅读 >>


吕子健 18/08/07 21:23:00
选择gettimeofday()函数的原因:精度比timer()函数高很多,time函数只精确到秒,而gettimeofday精确到微妙,足以满足各种所需,虽然有精度比它更高的,但是它的系统调用开销相对更小 函数原型 #include<sys/time.h> int gettimeofday(struct timeval* tv, struct timezone* tz); 成功返回0, 失败返回-1, 出错返回errno 参数意义 tv是指向下面这个结构体的一个指针 struct timeval { time_t tv_sec; suseconds_t tv_usec; } time_t 和suseconds_t 都是lont int 类型, tv_sec 表示Epoch 秒数, 而tv_usec 是额外的微妙精度 tz 是一个历史产物, 早期的UNIX实现用来获取系统的时区信息, 目前已经被废弃了, 应始终将其置为NULL. 继续阅读 >>


吕子健 18/08/03 17:16:10
今天敲了这样一段代码 class t { public: vector<shared_ptr<thread> > t1; public: t() { for (int i = 0; i < 3; i++) { t1.push_back(make_shared<thread>(&t::Func, this)); //(1) } } void Func() { cout << " hello world!" << endl; } }; 我在(1)的部分得到报错: error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member funct 错 继续阅读 >>


吕子健 18/07/25 09:40:43
 c++11增加了一个新的类型--右值引用,而移动语义是通过右值引用来匹配临时值的.  尽管不能将一个右值引用直接绑定到一个左值上,但可以通过move将一个左值显示的转换为对应的右值引用类型  move,这是一个具有迷惑性的名字,实际上,move函数并没有真正的移动对象,他只是将该对象从一个左值转换为一个右值   #include <iostream> #include <string> using namespace std; void func(string&& str) { cout << "here is func : " << str << endl; } int main() { string a = "here is a test"; func(move(a)); cout << "a : " << a << endl < 继续阅读 >>


吕子健 18/06/23 22:42:42
学习epoll反应堆发现网上的epoll反应堆都是同一份代码框架… 自己理解、梳理一遍,思路在注释里 #include <stdlib.h> #include <stdio.h> #include <stdio.h> #include <sys/socket.h> #include <sys/epoll.h> #include <arpa/inet.h> #include <fcntl.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <time.h> #define MAX_EVENTS 1024 #define BUFLEN 128 #define SERV_PORT 8080 /* * status:1表示在监听事件中,0表示不在 * last_act 继续阅读 >>


吕子健 18/06/02 21:03:51
以下示例来自Ubuntu17.10 (1)安装tesseract sudo apt-get install tesseract-ocr (2)如果想用 Tesseract 对图像进行识别,还需要对应的语言文件。所谓的语言文件是 Tesseract 识别某种语言的文字图像时需要的一些资源,这些东西也可以通过包管理器获取。 sudo apt-get install tesseract-ocr-eng tesseract-ocr-chi-sim 这里就下了:eng是英语,chi_sim是中文 (3)安装tesseract-ocr编译必须的包。autoconf 可以帮助你写出款平台编译的程序,而automake则主要是帮你更好的完成跨 平台编译这件事情。编译需要用到各种编译器命令,因为不想手动的执行这些命名出现了 Makefile,又因为不想手动的编写Makefile出现了automake这类的工具,它让你可以 只提供源文件的名称便替你生成 Makefile,这也着实省下不少的麻烦。 继续阅读 >>


吕子健 18/05/27 17:07:14
先占坑,总结到目前为止的所学和观点,留待日后学到新的知识或者有新的认知了再回来更新 (先吐槽,网上搜定时器和时间轮,那些博客的代码居然基本上都是Linux高性能上的,虽然我也是…感叹一下看来这本书很厉害,是不是目前讲这方面的书很少,只有它啊…) 定时器 定时器就是一个数据结构,他最主要的成员是回调函数和超时时间,等到超时时间到期,自动执行这个函数。 定时器的实现 单线程实现 单线程实现类似于在一个循环线程里用epoll和usleep等待接口实现超时回调 多线程实现 /* 日后再说 */ 时间轮 本质就是一个定时器容器,可以更具效率的管理定时器,下面贴的代码也是出自《Linux高性能》,以数组实现了一个时间轮,只有一个”轮子“ (1)定时器的简单实现 //升序定时器链表 #ifndef LST_TIMER_H #define LST_TIMER_H #include <netinet/in.h> #include <stdio.h> #inclu 继续阅读 >>


吕子健 18/05/24 22:38:52