ppoll
接口名称
ppoll(struct pollfd *fds, nfds_t nfds, const struct timespec *timeout_ts, const sigset_t *sigmask)
接口描述
等待在异步描述符上事件触发。
参数说明
| 参数 | 说明 | 备注 |
|---|---|---|
| *fds | 侦听的文件描述符指针 | - |
| nfds | 文件描述符个数 | - |
| *timeout_ts | 阻塞等待文件描述符的超时时间间隔 | ms级精度。 |
| *sigmask | 需要执行信号屏蔽操作 | - |
返回值
类型:int
- 正数:有事件触发或者错误上报的socket描述符个数,表示成功
- 0:调用超时没有文件描述符就绪
- -1:表示失败,并设置errno以指示错误类型
错误码
| 错误码 | 描述 |
|---|---|
| EINVAL | 入参timeout_ts无效。 |
| EINVAL | 入参nfds无效。 |
| EINVAL | 共线程部署模式时,sockfd的worker id和当前线程的worker id不一致,即socket跨worker线程调用。 |
| EFAULT | 入参fds为空。 |
| EMFILE | 进程的file数量超过max_tcpcb。 |
| ENFILE | 系统的file数量超过上限。 |
| ENOSPC | 尝试在主机上注册(EPOLL_CTL_ADD)新文件描述符时遇到/proc/sys/fs/epoll/max_user_watches施加的限制。 |
| EEXIST | 入参fds中的fd已经被注册(EPOLL_CTL_ADD)。 |
| EINVAL | 入参fds中的fd与内部创建的fd相同。 |
| ENOMEM | mbuf内存申请失败。 |
| ENOMEM | 系统内存申请失败。 |
| EINTR | 被信号中断。 |
| ELIBBAD | 系统符号加载失败。 |
| EPERM | 信号退出流程中,不允许调用该函数接口。 |