使用select机制处理多连接

栏目: 服务器 · 发布时间: 6年前

内容简介:当服务器根据客户端的请求创建多个连接以后,每个连接对应不同的套接字,因为recv函数默认是阻塞的,会造成在等待一个客户端套接字返回数据的时候整个进程阻塞,而无法连接收其他客户端套接字数据,这时候需要一个可以处理多个连接的方法,socket库提供了两个函数select和poll用来等待一组套接字句柄的读写操作。??select函数是比较常用的,函数定义有新的标准:?

当服务器根据客户端的请求创建多个连接以后,每个连接对应不同的套接字,因为recv函数默认是阻塞的,会造成在等待一个客户端套接字返回数据的时候整个进程阻塞,而无法连接收其他客户端套接字数据,这时候需要一个可以处理多个连接的方法,socket库提供了两个函数select和poll用来等待一组套接字句柄的读写操作。

? Linux 系统提供了select函数和poll函数两个网络套接字描述符。如 程序员 可以通过这两个函数的返回结果,知道那个套接字描述符上有数据处理,使用select函数和poll函数后,程序可以省去不断的伦向网络套接字描述符的步骤。在后台运行网络和poll函数可以显著提高网络应用程序的工作效率。

?select函数是比较常用的,函数定义有新的标准:?

void FD_ZERO(fd_set *fdset);

void FD_SET(int fd, fd_set *fdset);

void FD_CLR(int fd, fd_set *fdset);

int FD_ISSET(int fd, fd_set *fdset);

下面简单介绍一下可读、可写和有异常的定义。

可读的4种定义:(1)套接字缓冲区收到了足够的数据(和TCP的实现有关),也就是说这时调用recv()函数不会阻塞,而且返回一个大于0的值。(2)套接字的读半部被关闭,也就是说它收到了一个FIN标志。此时调用recv()函数返回0。(3)在服务器端套接字成功开始监听,并且完成了至少1个连接。也就是说这时调用 accept ()函数不会阻塞。(4)有一个套接字出错了,这时调用recv()函数则返回-1。

可写的4中定义:(1)套接字的发送缓冲区有足够的空间接收数据此时调用send()函数不会阻塞且返回一个大于0的值。(2)套接字的写半部被关闭。(3)非阻塞的connect()函数成功建立了连接,或者失败。(4)有一个套接字出错了,这时调用send()函数则返回-1。

根据不同的标准,使用select函数需要包含不同的头文件,select函数提供一种fd-

set

机制,fd-set是一组文件句柄的集合,参数n通常取select函数的fd-set中最大的一个文件句柄加1,参数readfds是要监控的读文件句柄集合,当readfds或者writefds有数据或者时间超时,select函数返回大于0的值,用户可以判断哪个套接字句柄返回数据,如果函数返回0表示超时,出错返回-1.需要注意的是,在每次调用完select函数后,需要重新设置fd-set。


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

查看所有标签

猜你喜欢:

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

计算机组成:结构化方法

计算机组成:结构化方法

坦嫩鲍姆 / 刘卫东 / 人民邮电出版社 / 2006-1 / 65.00元

本书采用结构化方法来介绍计算机系统,书的内容完全建立在“计算机是由层次结构组成的,每层完成规定的功能”这一概念之上。作者对本版进行了彻底的更新,以反映当今最重要的计算机技术以及计算机组成和体系结构方面的最新进展。书中详细讨论了数字逻辑层、微体系结构层、指令系统层、操作系统层和汇编语言层,并涵盖了并行体系结构的内容,而且每一章结尾都配有丰富的习题。 本书适合作为计算机专业本科生计算机组......一起来看看 《计算机组成:结构化方法》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

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

在线 XML 格式化压缩工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具