20200211

@ShiKaiWi

Plan

40min: UNP

Notes

UNP

I/O 模型

阻塞式 I/O: 包括多路服用 非阻塞式 I/O: 需要多次调用,类似于 polling 信号驱动式 I/O(signal-driven I/O): 类似 interupt 的机制,不同于异步 I/O,接收到通知后,仍然需要去将数据从内核拷贝到进程的缓冲区 异步 I/O: 和信号驱动式的区别在于,接收到通知的时候数据已经被拷贝到了进程缓冲区

select 函数

记录一下函数签名

#include <sys/select.h>
#include <sys/time.h>

int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timeval *timeout);

有两点容易搞错:

  1. maxfdp1 = 最大 fd + 1, 因为这里是指需要检查的 fd 个数,而 fd 是从 0 开始的
  2. 返回值为就绪的 fd 个数,但是需要注意的是三个入参 fd set 都被修改了,只保留了就绪的 fd flag,因此处理完毕后,进行下一轮 select 的时候,需要记得将关注的 fd 都重新标记上。

More