I/O多路复用-select函数
Nov 3, 2014
函数申明
int select(int nfds, fd_set *restrict readfds, fd_set *restrict writefds, fd_set *restrict errorfds, struct timeval *restrict timeout);
参数
- nfds 最大文件描述符加1. (FD_SETSIZE ,大于等于系统支持的最大文件描述符number)
- readfds 检查可读性的描述符集合,函数调用后可能被覆盖为可读描述符的结果返回
- writefds 检查可写的描述符集合,函数调用后可能被覆盖为可写描述符的结果返回
- errorfds 检查异常的描述符集合
- timeout 时间结构体指针
是否阻塞
timeout 参数决定select是否阻塞
当 timeout 为 NULL 时, select 函数会一直阻塞直到监听的文件描述符发生变化.
当 timeout 为 0 时, select 函数立刻返回.
当 timeout > 0 时, select 函数阻塞特定时间返回.
返回值
对于 select 的返回值, 负值表示 select 函数执行中发生错误. 0 表示超时结束. 正值表示有可读描述符.
示例代码
代码源地址