8、SOCKET-IO复用技术.ppt

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8、SOCKET-IO复用技术.ppt

第八章 IO复用技术 本章目标 IO复用基本概念 select函数 I/O复用 如果一个或多个I/O条件满足(例如:输入已准备好被读,或者描述字可以承接更多输出的时候)我们就能够被通知到,这样的能力被称为I/O复用,是由函数select和poll支持的 I/O复用网络应用场合 当客户处理多个描述字 一个客户同时处理多个套接口 如果一个tcp服务器既要处理监听套接口,又要处理连接套接口 如果一个服务器既要处理TCP,又要处理UDP 五个I/O模型 阻塞I/O 非阻塞I/O I/O复用(select和poll) 信号驱动I/O 异步I/O 阻塞I/O模型 最流行的I/O模型是阻塞I/O模型,缺省时,所有的套接口都是阻塞的 非阻塞I/O模型(2-1) 当我们把一个套接口设置为非阻塞方式时,即通知内核:当请求的I/O操作非得让进程睡眠不能完成时,不要让进程睡眠,而应返回一个错误 非阻塞I/O模型(2-2) I/O复用模型 信号驱动I/O模型 我们也可以用信号,让内核在描述字准备好时用信号SIGIO通知我们,我们将此方法称为信号驱动I/O 异步I/O模型 异步I/O是Posix.1的1993版本中的新内容,我们让内核启动操作,并在整个操作完成后通知我们 select函数作用 select函数什么情况下返回 作为一个例子,我们可以调用函数select并通知内核仅在下列情况发生时才返回: 集合{1,4,5}中的任何描述子准备好读 或 集合{2,7}中的任何描述字准备好写或 集合{1,4}中的任何描述字有异常条件待处理或 已经过了10.2秒 也就是说,通知内核我们对哪些描述字感兴趣 (读、写或异常条件)以及等待多长时间。 select函数 包含头文件sys/select.hsys/socket.h 功能:提供了即时响应多个套接的读写事件 原型: int select(int maxfdp1,fd_set *readset,fd_set *writeset,fd_set *except,const struct timeval *timeout); 参数 maxfdp1:等待最大套接字值加1 readset:要检查读事件的容器 writeset:要检查写事件的容器 timeout:超时时间 返回值:返回触发套件接字的个数 timeval结构 timeout参数 timeout参数有三种可能 永远等待下去:仅在有一个描述字准备好I/O时才返回,为此,我们将timeout设置为空指针 等待固定时间:在有一个描述字准备好I/O是返回,但不超过由timeout参数所指timeval结构中指定的秒数和微秒数 根本不等待:检查描述字后立即返回,这称为轮询。定时器的值必须为0 fd_set参数 select使用描述字集,它一般是一个整数数组,每个数中的每一位对应一个描述字。 使用fd_set数据类型来表示这个描述字集,我们不用去关心具体的实现细节。 操作fd_set的四个宏 fd_set使用 对集合的初始化是很重要的,如果集合作 为一个自动变量分配而未初始化,那将导 致不可预测的后果 fd_set rset; FD_ZERO(rset); FD_SET(1,rset); FD_SET(4,rset); FD_SET(5,rset); select函数的三个中间参数 中间的三个参数readset、writeset和exceptset指定我们要让内核测试读、写和异常条件所需的描述字 如果我们对某个条件不感兴趣,这三个参数中相应的参数就可以设为空指针 maxfdp1参数 select函数返回值 套接口准备好读 套接口准备好写 shutdown函数 shutdown与close的区别 Poll模型 Poll函数和select类似,但它是用文件描述符而不是条件的类型来组织信息的. 也就是说,一个文件描述符的可能事件都存储在struct pollfd中.与之相反,select用事件的类型来组织信息,而且读,写和错误情况都有独立的描述符掩码.poll函数是POSIX:XSI扩展的一部分,它起源于UNIX System V 函数poll原型 包含头文件poll.h 功能:与select函数功能相同 原型: int poll(struct pollfd *fdarray,unsigned long nfds,int timeout); 参数 fdarray是一个pollfd的机构体数组用来表示表示文件描述符的监视信息 nfds参数给出了要监视的描述符数目 timeout参数是一个用豪秒表示的时间,是poll在返回前没有接收事件是应等待的时间,如果timeout的值为-1,poll就永远不会超时.如果整数值为32个比特,那么最

文档评论(0)

feiyang66 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档