poll系统调用

1 #include <poll.h>
2 int poll(struct pollfd* fds,nfds_t nfds,int timeout);

  fds,pollfd结构类型的数组(可变长数组,数组元素为结构体pollfd);结构体中含有三个成员变量(int,short,short),分别为文件描述符fd,注册的事件evevts(一系列事件的按位或),实际发生的事件revents;fd成员指定fd,events成员告诉poll函数监听fd上的哪些事件(可读,可写,异常事件),revents成员由内核对其进行修改,通知应用程序实际发生了哪些事件;

1 struct pollfd
2 {
3         int fd; //文件描述符
4         short events; //注册的事件,用户填充
5         short revents; //实际发生的事件,内核填充
6 };

  nfds,无符号长整型,被监听的fd的数量;

1 typedef unsigned long int nfds_t

 

  timeout,设置poll函数的超时时间,单位为毫秒;

  返回值,timeout为0,poll调用立即返回;timeout为-1,poll调用一直阻塞,直到某个fd就绪。

      poll成功,返回就绪的fd的数量;(超时时间内没有fd就绪,返回0)

      poll失败,返回-1,并设置errno。

 

  poll事件的类型

  POLLIN-数据可读;POLLRDNORM-普通数据可读;POLLRDBAND-优先级带数据可读;POLLPRI-高优先级数据可读;

  POLLOUT-数据可写;POLLWRNORM-普通数据可写;POLLWRBAND-优先级带数据可写;

  POLLRDHUP-TCP连接对方关闭或者对方关闭了写操作;

  POLLERR-错误;POLLHUP-挂起;POLLNVAL-fd没有打开。

posted @ 2021-01-30 14:29  封狼居胥!  阅读(169)  评论(0编辑  收藏  举报