I/O多路复用之poll函数分析
2017-04-18 10:06
148 查看
poll函数
poll的机制与select类似,也是指定时间内轮询一定数量的文件描述符,以测试其中是否有就绪者,poll原型如下:
参数:
1)fds参数是一个pollfd结构类型的数组,它制定所有我们感兴趣的文件描述符上发生的可读,可写和异常等事件。pollfd结构体的定义如下:
其中,fd成员指定文件描述符,events成员告诉poll监听fd上的哪些事件,它是一系列事件的按位或;revents成员则是由内核修改,以通知应用程序fd上实际发生了哪些事件。poll支持的事件类型如表所示:
表中,POLLRDNORM、POLLRDBAND、POLLWRNORM、POLLWRBAND由XOPEN规范定义。它们实际上是将POLLIN事件和POLLOUT事件分得更细致。
2)nfds参数指定被监听事件集合fds的大小,比如定义structpollfd fds[2],则nfds就为2。
其类型nfds_t的定义如下:
3)timeout参数指定poll的超时值,单位是毫秒。
timeout为-1时,poll调用将永远阻塞,直到某个事件发生;
timeout为0时,poll调用将立即返回。
timeout>0时,等待指定数目的毫秒数。
返回值
poll系统调用的返回值的含义和select相同。
poll函数的优点和缺点:
优点:
poll函数可以处理多个socket描述符。
记录内核返回状态的描述符。
缺点:
select和poll都需要在返回后,通过遍历文件描述符来获取已经就绪的socket。事实上,同时连接的大量客户端在一时刻可能只有很少的处于就绪状态,因此随着监视的描述符数量的增长,其效率也会线性下降(内核态和用户态都需要遍历描述符集合)。
用poll实现udp同时收发
示例代码:https://github.com/chensguo8099/network_programming/blob/master/poll_udp_test.c
poll的机制与select类似,也是指定时间内轮询一定数量的文件描述符,以测试其中是否有就绪者,poll原型如下:
1 2 | #include < poll.h > int poll(struct pollfd *fds, nfds_t nfds, int timeout); |
1)fds参数是一个pollfd结构类型的数组,它制定所有我们感兴趣的文件描述符上发生的可读,可写和异常等事件。pollfd结构体的定义如下:
1 2 3 4 5 6 | struct pollfd { int fd; //文件描述符 short events; //注册的事件 short revents; //实际发生的事件,由内核填充 } |
表中,POLLRDNORM、POLLRDBAND、POLLWRNORM、POLLWRBAND由XOPEN规范定义。它们实际上是将POLLIN事件和POLLOUT事件分得更细致。
2)nfds参数指定被监听事件集合fds的大小,比如定义structpollfd fds[2],则nfds就为2。
其类型nfds_t的定义如下:
typedef unsigned long int nfds_t; |
timeout为-1时,poll调用将永远阻塞,直到某个事件发生;
timeout为0时,poll调用将立即返回。
timeout>0时,等待指定数目的毫秒数。
返回值
poll系统调用的返回值的含义和select相同。
poll函数的优点和缺点:
优点:
poll函数可以处理多个socket描述符。
记录内核返回状态的描述符。
缺点:
select和poll都需要在返回后,通过遍历文件描述符来获取已经就绪的socket。事实上,同时连接的大量客户端在一时刻可能只有很少的处于就绪状态,因此随着监视的描述符数量的增长,其效率也会线性下降(内核态和用户态都需要遍历描述符集合)。
用poll实现udp同时收发
示例代码:https://github.com/chensguo8099/network_programming/blob/master/poll_udp_test.c
相关文章推荐
- poll函数实现多路复用
- poll函数用户态内核态全面分析2
- Linux C——poll函数实现多路复用
- I/O多路复用之poll服务器
- I/O多路复用之poll
- 简单的多路复用编程(I/O)----select()和poll函数的运用
- 基于表格形式的select,poll,epoll对比-IO多路复用函数的应用场景
- 3.8 poll函数的详细分析
- I/O多路复用之poll模型
- IO 多路复用之poll总结
- linux网卡驱动dm9000_poll_work函数分析
- Linux网络编程——I/O复用之poll函数
- do_select()函数分析,理解select(),poll(),poll_wait()函数的关系
- 全面分析多路I/O转换(select 、poll /epoll)
- I/o多路复用之poll
- poll函数用户态内核态全面分析1
- 多路复用之poll
- poll函数源码详细分析 http://blog.csdn.net/lmh12506/article/details/7556297
- I/O多路复用之POLL系统调用
- I/O多路转接之poll 函数