select
接口名称
select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)
接口描述
一段指定时间内,侦听用户感兴趣的文件描述符的可读、可写和异常事件。
说明: 只支持轮询侦听。调用select期间,select会占用100%的CPU。
参数说明
| 参数 | 说明 | 备注 |
|---|---|---|
| nfds | 集合中所有文件描述符的范围,即所有文件描述符的最大值加1 | 最大值是1024。 |
| *readfds | 待监测读取操作的文件描述符集合 | 支持为NULL。包含了需要检查是否可读的描述符,输出时表示哪些描述符可读。 |
| *writefds | 待监测写入操作的文件描述符集合 | 支持为NULL。包含了需要检查是否可写的描述符,输出时表示哪些描述符可写。 |
| *exceptfds | 待监测异常条件的文件描述符集合 | 支持为NULL。包含了需要检查是否出错的描述符,输出时表示哪些描述符出错。 |
| *timeout | 一个时间结构体,用来设置超时时间 | 仅支持到ms级精度。为NULL时,为阻塞永久等待。 |
返回值
类型:int
- 正数:就绪的文件描述符的个数,表示成功
- 0:表示在达到超时之前,没有准备好的文件描述符
- -1:表示失败,并设置errno以指示错误类型
错误码
| 错误码 | 描述 |
|---|---|
| EINVAL | 入参timeout无效;入参nfds小于0或大于FD_SETSIZE。 |
| ENOMEM | mbuf内存申请失败。 |
| EINTR | 被信号中断。 |
| ELIBBAD | 系统符号加载失败 |
| ENOMEM | 系统内存申请失败。 |