使用poll机制处理多连接

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

内容简介: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()就像它的名字那样,一旦选举出来,立即返回。


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

查看所有标签

猜你喜欢:

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

计算群体智能基础

计算群体智能基础

恩格尔伯里特 / 谭营 / 2009-10 / 69.00元

《计算群体智能基础》全面系统地介绍了计算群体智能中的粒子群优化(PSO)和蚁群优化(ACO)的基本概念、基本模型、理论分析及其应用。在简要介绍基本优化理论和总结各类优化问题之后,重点介绍了社会网络结构如何在个体间交换信息以及个体聚集行为如何形成一个功能强大的有机体。在概述了进化计算后,重点论述了粒子群优化和蚁群优化的基本模型及其各种变体,给出了分析粒子群优化模型的一种通用方法,证明了基于蚂蚁行为实......一起来看看 《计算群体智能基础》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具