poll函数
poll函数起源于SVR3,最初局限于流设备。SVR4取消了这种限制,允许poll工作在任何描述字上。poll提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息。
1.#include
2.
3.int poll(struct pollfd *fdarray, unsigned long nfds, int timeout);
4. 返回:就绪描述字的个数,0-超时,-1-出错
第一个参数是指向一个结构数组第一个元素的指针。每个数组元素都是一个pollfd结构,用于指定某个给定描述字fd的条件。
struct pollfd{
int fd; //descriptor to check
short events; //events of interest on fd
short revents; //events that occurred on fd
};
要的条件由events成员指定,而返回的结果则在revents中。常用条件及含意说明如下:
poll函数可用的测试值
常量说明
POLLIN普通或优先级带数据可读
POLLRDNORM普通数据可读
POLLRDBAND优先级带数据可读
POLLPRI高优先级数据可读
POLLOUT普通数据可写
POLLWRNORM普通数据可写
POLLWRBAND优先级带数据可写
POLLERR发生错误
POLLHUP发生挂起
POLLNVAL描述字不是一个打开的文件
注意:后三个只能作为描述字的返回结果在revents中,而不能作为测试条件用于events中。
第二个参数nfds是用来指定数组fdarray的长度。
最后一个参数timeout是指定poll函数返回前等待多长时间。它的取值如下:
timeout值说明
INFTIM永远等待
0立即返回,不阻塞进程
>0等待指定数目的毫秒数
一个使用poll的网络程序例子:
001./**
002. *TCP回射的服务端程序
003. */
004.#include
005.#include
006.#include
007.#include
008.#include
0