电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> Unix>>慢系统调用与自动重启:

慢系统调用与自动重启

来源:www.cncfan.com | 2006-1-11 | (有4784人读过)

慢系统调用(slow system call)是指一些可能永远无法返回的系统调用,多数网络支持函数都在此列,比如accept、read、write、select、open等。

慢系统调用会涉及到一个内核自动重启该调用的问题。因为系统调用在阻塞时很可能被信号处理函数中断,此时内核使该调用返回一个EINTR错误(被中断的系统调用)。若接下来不处理该错误,该进程就会被中止。

虽然在登记信号处理函数时可以设置SA_RESTART标志让调用被中止后自动重启,但不是所有的UNIX操作系统都支持的。而且差不是所有的慢系统调用都可以自动重启的,比如connect,它必须调用select等待连接完成。

一个典型的重启方案是用for循环来实现的:

for(;;){

clilen = sizeof(cliaddr);

if((connfd = accept(listenfd, (SA*)&cliaddr,&clilen))<0){

if(errno == EINTR)

continue; //重启

else

err_sys("accept error!");

}

Unix热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2021 电脑爱好者 版权所有 备案号:鲁ICP备09059398号