I/O多路转接之poll 函数
来源:互联网 发布:java删除数组中的元素 编辑:程序博客网 时间:2024/05/16 13:49
http://blog.csdn.net/li_ning_/article/details/52167224
poll
一、poll()函数:
这个函数是某些Unix系统提供的用于执行与select()函数同等功能的函数,自认为poll和select大同小异,下面是这个函数的声明:
参数:
1.第一个参数:一个结构数组,struct pollfd:
fds:是一个struct pollfd结构类型的数组,每个数组元素都是一个pollfd结构,用于指定测试某个给定描述字fd的条件。存放需要检测其状态的Socket描述符;每当调用这个函数之后,系统不会清空这个数组,操作起来比较方便;特别是对于socket连接比较多的情况下,在一定程度上可以提高处理的效率;这一点与select()函数不同,调用select()函数之后,select()函数会清空它所检测的socket描述符集合,导致每次调用select()之前都必须把socket描述符重新加入到待检测的集合中;因此,select()函数适合于只检测一个socket描述符的情况,而poll()函数适合于大量socket描述符的情况;
结构如下:
events和revents是通过对代表各种事件的标志进行逻辑或运算构建而成的。events包括要监视的事件(就是我需要关注的时间,是读?是写?还是出错?),poll用已经发生的事件填充revents。poll函数通过在revents中设置标志肌肤POLLHUP、POLLERR和POLLNVAL来反映相关条件的存在。不需要在events中对于这些标志符相关的比特位进行设置。如果fd小于0, 则events字段被忽略,而revents被置为0.标准中没有说明如何处理文件结束。文件结束可以通过revents的标识符POLLHUN或返回0字节的常规读操作来传达。即使POLLIN或POLLRDNORM指出还有数据要读,POLLHUP也可能会被设置。因此,应该在错误检验之前处理正常的读操作。
poll函数的事件标志符值:
常量说明POLLIN普通或优先级带数据可读POLLRDNORM普通数据可读POLLRDBAND优先级带数据可读POLLPRI高优先级数据可读POLLOUT普通数据可写POLLWRNORM普通数据可写POLLWRBAND优先级带数据可写POLLERR发生错误POLLHUP发生挂起POLLNVAL描述字不是一个打开的文件注意:
1)后三个只能作为描述字的返回结果存储在revents中,而不能作为测试条件用于events中。
2)第二个参数nfds:要监视的描述符的数目。
3)最后一个参数timeout:是一个用毫秒表示的时间,是指定poll在返回前没有接收事件时应该等待的时间。如果 它的值为-1,poll就永远都不会超时。如果整数值为32个比特,那么最大的超时周期大约是30分钟。
timeout值说明INFTIM永远等待0立即返回,不阻塞进程>0等待指定数目的毫秒数
如果是对一个描述符上的多个事件感兴趣的话,可以把这些常量标记之间进行按位或运算就可以了;
比如:
对socket描述符fd上的读、写、异常事件感兴趣,就可以这样做:
当 poll()函数返回时,要判断所检测的socket描述符上发生的事件,可以这样做:
二、实例TCP服务器的服务器程序
赐教!
- I/O多路转接之poll 函数
- I/O多路转接之poll 函数
- I/O多路转接之poll
- I/O多路转接之poll
- I/O多路转接之poll
- I/O多路转接之poll
- I/O多路转接之poll
- I/O多路转接之poll
- I/O多路转接之poll
- I/O多路转接之poll
- I/O多路转接之poll
- I/O多路转接之select、poll、epoll
- 【计算机网络】I/O多路转接之poll
- I/O多路转接之poll服务器
- Linux—I/O多路转接之poll
- I/O多路转接至poll
- 【Linux】I/O多路转接poll
- I/O多路转接-----poll
- Axis2与Web项目整合(转载)
- TCP/IP协议编号查询
- Java三大器之拦截器(Interceptor)的实现原理及代码示例
- leetcode卖股票问题汇总
- PAT
- I/O多路转接之poll 函数
- FTL文件转换成PDF文件工具类
- Int类型的最小值取负后值不变
- mybatis 常用jdbcType 数据类型
- SpringMVC起步
- Eclipse和debug的一些快捷键:F8一直执行到下一个断点
- 为什么SSL对于安全的网页浏览很重要
- MySQL 分页查询
- css实现两栏自适应布局