Linux socket

socket 参数

MSG_OOB

其实MSG_OOB并不是真正意义的"带外数据(out-of-band),真正意义上的out-of-band需要通过单独的通信路径高速传输数据,但TCP不提供,只是利用TCP的紧急模式传输数据。
MSG_OOB的意义在于督促对方接收数据,TCP的顺序传输特性依然保持。
TCP的紧急模式原理是,TCP头里有个信息存储紧急消息的指针,指向这个紧急消息的最后一个偏移的下一个位置,也就是指针前面就是表示紧急消息。除了紧急消息的前一个字节外,剩下的字节由常用输入函数去读取。
比如你发送"123"紧急消息,TCP头里有个URG指针指向[1, 2 , 3],这个'3'后面的位置,这个指针前就表示是个紧急消息,对方只会把这指针前一个字节当作紧急消息,剩余的"12"被其他常用输入函数如read()函数读取。

ref:https://aleen42.gitbooks.io/wiki/content/Network/Transport/OOB/OOB.html

tcpdump

ref:https://www.cnblogs.com/wongbingming/p/13212306.html

一些IO函数

pipe

pipe[0] <--> pipe[1] 两个fd进程间通信

pipe[0] 只用于读出数据;pipe[1]只用于写入数据。可创建两个pipe来实现双向通信。

dup、dup2

stdout --> file fd / socket fd 重定向

readv、writev

file fd / socket fd --> memory blocks 分散读
memory blocks --> file fd / socket fd 集中写

sendfile

file fd --> socket fd 文件到socket的零拷贝移动数据

mmap、munmap

socket fd <--> file fd / socket fd 之间零拷贝数据

splice

pipe fd <--> file fd/socket fd 之间零拷贝移动数据

tee

pipe fd --> pipe fd 之间零拷贝复制数据,原fd上的数据仍然可以被读取

同步异步阻塞

阻塞IO:主动read、write,当没有数据时,程序挂起
IO复用:将read、write等IO事件变为非阻塞操作,读取写入失败直接返回并重复尝试。可同时监听多个IO事件,对于调用IO复用的程序来说,IO复用是同步的
SIGIO信号:当读写事件就绪,通过信号通知用户程序执行读写
异步IO:读写事件就绪后,直接由内核执行读写操作,并返回读写完成事件给用户程序;同步IO返回的是就绪事件,需要再自行读写;

reactor 和 proactor

reactor主线程只管处理连接事件,读写交给工作线程;
proactor主线程同时处理连接事件和读写,再将数据交由工作线程处理;

posted @ 2022-10-07 16:19  moon_orange  阅读(48)  评论(0编辑  收藏  举报