使用poll机制处理多连接

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

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


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

查看所有标签

猜你喜欢:

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

编程语言实现模式

编程语言实现模式

Terence Parr / 李袁奎、尧飘海 / 华中科技大学出版社 / 2012-3-20 / 72.00元

《编程语言实现模式》旨在传授开发语言应用(工具)的经验和理念,帮助读者构建自己的语言应用。这里的语言应用并非特指用编译器或解释器实现编程语言,而是泛指任何处理、分析、翻译输入文件的程序,比如配置文件读取器、数据读取器、模型驱动的代码生成器、源码到源码的翻译器、源码分析工具、解释器,以及诸如此类的工具。为此,作者举例讲解已有语言应用的工作机制,拆解、归纳出31种易于理解且常用的设计模式(每种都包括通......一起来看看 《编程语言实现模式》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

MD5 加密
MD5 加密

MD5 加密工具