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没有打开。