信号驱动式I/O

    信号驱动式I/O是一种 “拉模式”,当数据报到达时触发SIGIO信号,该信号通知数据已经到来,并没有将数据都入到应用程序的buffer中。
    因此,还需要我们在SIGIO信号处理函数中,手动的读取到来的数据,将其存放在buffer中。


针对一个套接字使用信号驱动式IO(SIGIO)要求进程执行以下3个步骤
(1) 建立SIGIO信号捕捉函数
(2) 设置套接字的属主,通常使用fcntl的F_SETOWN命令设置
(3) 开启该套接字的信号驱动式IO,通常使用fcntl的F_SETFL命令打开O_ASYNC标志

对于UDP套接字,SIGIO信号在发生以下事件时产生:
① 数据包到达套接字(需要在SIGIO信号捕捉函数中调用recvform去读取)
② 套接字上发生异步错误

对于TCP套接字,信号驱动式IO对其近乎无用,我们应该考虑只对监听TCP套接字使用SIGIO(因为对于监听套接字产生SIGIO的唯一条件是某个新连接的完成)


大多数UDP服务器(基于UDP的NTP服务器程序)的工作方式
    当新的数据报达到时,SIGIO信号到达,服务器程序的SIGIO信号捕捉函数读入该数据报,同时记录它的到达时刻,然后将它添加到进程内的一个数据队列中,以便服务器循环移走并处理数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值