使用poll机制处理多连接

栏目: 数据库 · 发布时间: 7年前

内容简介:poll函数提供与select函数类似的功能,解决了select函数存在的一些问题,并且函数调用方式也更加简单,函数定义如下:#include <stdlib.h>#include <sys/socket.h>

poll函数提供与select函数类似的功能,解决了select函数存在的一些问题,并且函数调用方式也更加简单,函数定义如下:

#include <stdlib.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <sys/select.h>

与select函数分别监控不同类型操作的文件句柄不同,poll函数使用pollfd类型的结构来监控一组文件句柄,参数ufds是要监控的文件句柄符合,nfds是监控的文件句柄数量,tinmeout参数指定等待的毫米数,无论I/O 是否准备好,nfds是监控的文件句柄数量,timeout为0表示poll调用立即返回并列出准备好I/O的文件描述符,但并不等待其他的事件,成功时,poll函数返回结构体中的revents域不为0的文件描述符个数,如果在超时前都没有任何事件发生,poll函数返回0,失败时,poll函数返回-1,与poll函数相关的pollfd结构定义如下:

if(receivedMessages.empty() == false)

{

FD_ZERO(&writeSet);

for(mapIt = receivedMessages.begin();

mapIt != receivedMessages.end(); mapIt ++)

FD_SET(mapIt->first, &writeSet);

select(getMapMax(receivedMessages) + 1, NULL, &writeSet, NULL, NULL);

for(mapIt = receivedMessages.begin();

mapIt != receivedMessages.end(); mapIt ++)

pollfd结构中定义了一个需要监控的文件描述符以及监控的事件。可以向poll函数传递一个poll结构的数组,用于监控多个文件描述符。pollfd结构中,events结构中的成员数量是监控事件描述符的掩码,用户通过系统提供的函数设置需要监控事件对应的掩码比特位。revents成员变量是文件描述监控事件的返回掩码,内核在监控到某个文件描述符指定事件后对应设置的比特位。用户程序可以通过判断对应的事件比特位确定被监控事件是否返回。

需要注意的是,在每次使用了poll函数和select函数不一样,不需要显示的请求异常情况的最新报告。POLLIN | POLLPRI等价于select()的读事件,POLLOUT |POLLWRBAND等价于select()的写事件。POLLIN等价于POLLRDNORM |POLLRDBAND,而POLLOUT则等价于POLLWRNORM。 

例如,要同时监视一个文件描述符是否可读和可写,我们可以设置 events为POLLIN |POLLOUT。在poll返回时,我们可以检查revents中的标志,对应于文件描述符请求的events结构体。如果POLLIN事件被设置,则文件描述符可以被读取而不阻塞。如果POLLOUT被设置,则文件描述符可以写入而不导致阻塞。这些标志并不是互斥的:它们可能被同时设置,表示这个文件描述符的读取和写入操作都会正常返回而不阻塞。

timeout参数指定等待的毫秒数,无论I/O是否准备好,poll都会返回。timeout指定为负数值表示无限超时;timeout为0指示poll调用立即返回并列出准备好I/O的文件描述符,但并不等待其它的事件。这种情况下,poll()就像它的名字那样,一旦选举出来,立即返回。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入理解计算机系统(英文版·第2版)

深入理解计算机系统(英文版·第2版)

[美] Randal E. Bryant、[美] David R. O'Hallaron / 机械工业出版社 / 2011-1 / 128.00元

本书是一本将计算机软件和硬件理论结合讲述的经典教程,内容覆盖计算机导论、体系结构和处理器设计等多门课程。本书的最大优点是为程序员描述计算机系统的实现细节,通过描述程序是如何映射到系统上,以及程序是如何执行的,使读者更好地理解程序的行为为什么是这样的,以及造成效率低下的原因。 相对于第1版,本版主要是反映了过去十年间硬件技术和编译器的变化,具体更新如下: 1. 对系统的介绍(特别是实际使......一起来看看 《深入理解计算机系统(英文版·第2版)》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具