UNP——第六章,多路转接IO——select
Posted yangxinrui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UNP——第六章,多路转接IO——select相关的知识,希望对你有一定的参考价值。
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
};
nfds
最大文件描述符+1
通过告诉内核最多需要检查的文件描述符数量,以提高效率,(否则内核需要检查所有的文件描述符)
至于为什么是最大文件描述符值+1,表示 需要检查的文件描述符的数量,原因是 文件描述符从0开始,而数量从1 开始。
readfds, writefds, exceptfds
都是传入传出参数
通过位掩码的方式表示监听的文件描述符
void FD_CLR(int fd, fd_set *set); int FD_ISSET(int fd, fd_set *set); void FD_SET(int fd, fd_set *set); void FD_ZERO(fd_set *set);
timeout
可以选择:
一直阻塞,直到有事件触发
阻塞一段时间,直到有事件触发
不阻塞,立即返回
阻塞可能被信号处理中断,而timeout不是传出参数,所以timeout不会记录剩余的等待时间,而是使用上次的值调用。
如果需要剩余的等待时间,可以在select调用前后记录系统时间以计算。
以上是关于UNP——第六章,多路转接IO——select的主要内容,如果未能解决你的问题,请参考以下文章
五种高阶IO模型以及多路转接技术(selectpoll和epoll)及其代码验证
五种高阶IO模型以及多路转接技术(selectpoll和epoll)及其代码验证