select和poll函数《UNIX网络编程卷一》笔记

p122I/O复用:select和poll函数:

在客户阻塞与标准输入fgets调用期间,服务器进程被杀死。服务器TCP虽然正确的给客户TCP发送了FIN,但是既然客户进程阻塞于从标准输入读取的过程,它将看不到这个EOF,直到从套接字读时为止。这样进程需要一种预先告知内核的能力,使得内核一旦发现进程指定一个或多个I/O条件就绪(也就是说输入已准备好被读取,或者描述符已能承受更多的输出),他就通知进程。这个能力叫I/o复用。

场合:

当客户处理多个描述符时;

一个客户同时处理多个套接字是可能的,不过比较少见;

如果一个TCP服务器既要处理监听套接字,又要处理已连接套接字;

如果一个服务器既要处理TCP,又要处理UDP;

如果一个服务器要处理多个服务或者多个协议。

多种I/O模型:

阻塞式I/O模型;非阻塞式I/O模型(采用轮询的方式);I/O复用模型(阻塞在多个文件描述符上);信号驱动式I/O模型(数据一旦准备好就发送信号给信号处理函数,类似于中断);异步I/O模型(告知内核启动某个操作,并让内核在整个操作完成数据从内核复制到自己的缓冲区后通知信号处理程序数据报)

中间三个参数readset、writeset、exceptset指定让内核测试读、写和异常。

select使用描述集,通常是一个整数数组,其中每个整数中的每一位对应一个描述符。

maxfdpl参数指定待测试的描述符个数,它的值是待测试的最大描述符加1,显示的是描述符个数。

调用函数时,我们指定所关心的描述符的值,该函数返回时,结果将显示哪些描述符已就绪。函数返回后,调用FD_ISSET来测试fd_set数据类型中的描述符。描述符集中任何未就绪的描述符对应位返回时均清为0。因此每次调用都需要把所关心的描述符集内的位均置为1。

返回值表示所有描述符的已经就绪的总位数。返回0表示定时器到时间了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值