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


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

查看所有标签

猜你喜欢:

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

平台革命:改变世界的商业模式

平台革命:改变世界的商业模式

[美]杰奥夫雷G.帕克(Geoffrey G. Parker)、马歇尔W.范·埃尔斯泰恩(Marshall W. Van Alstyne)、桑基特·保罗·邱达利(Sangeet Paul Choudary) / 志鹏 / 机械工业出版社 / 2017-10 / 65.00

《平台革命》一书从网络效应、平台的体系结构、颠覆市场、平台上线、盈利模式、平台开放的标准、平台治理、平台的衡量指标、平台战略、平台监管的10个视角,清晰地为读者提供了平台模式最权威的指导。 硅谷著名投资人马克·安德森曾经说过:“软件正在吞食整个世界。”而《平台革命》进一步指出:“平台正在吞食整个世界”。以平台为导向的经济变革为社会和商业机构创造了巨大的价值,包括创造财富、增长、满足人类的需求......一起来看看 《平台革命:改变世界的商业模式》 这本书的介绍吧!

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

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码