当前位置:  技术问答>linux和unix

关于accept阻塞和alarm闹钟问题

    来源: 互联网  发布时间:2017-01-17

    本文导语:  我的程序中有以下几行:  int flag = 1; //全局变量  int main(){  .  .  .  signal(SIGINT,function); while(flag){   clientfd = accept(serverfd,NULL,NULL);     if(clientfd == -1){     if(erro == EINTR)  {fprintf(stderr,"!!!!n"); continue;}   ...

我的程序中有以下几行:
 int flag = 1; //全局变量
 int main(){
 .
 .
 . 
signal(SIGINT,function);
while(flag){
  clientfd = accept(serverfd,NULL,NULL);
    if(clientfd == -1){
    if(erro == EINTR)  {fprintf(stderr,"!!!!n"); continue;}
    .
    .
    .
}//if
}//while
fprintf("....n");
}//main结束

void function(int sig){
  flag = 0; 
  alarm(5);
  signal(SIGINT,SIG_DFL);
}

为什么我按了ctl+c后程序停5秒后结束,但是没有输出"!!!!" 和 "...."
求解,高手!谢谢!

|
LZ的程序之所以没有输出,因为没有设置SIGALRM信号的信号处理函数,当SIGALRM信号发生时,默认动作是终止程序;第二,accpet在信号发生时,是被中断了的,并且会去调用中断处理程序,只不过accpet被中断后,又被操作系统自动重启了,表现出来就好像没有被中断一样,也就不会有返回,自然不会执行accpet之后对errno的判断。

|
说明accept没返回,还堵在那呢,(你可以在accept下面加句打印clientfd的,应该都不会执行)程序捕获SIGINT信号后,就等着超时结束了
有点奇怪的是记得以前在AIX上搞过类似的accept是有返回-1的,按这样来说以上例子因该是会打印,并且程序也不会sleep5秒,程序会立刻结束
所以说这个最好还是要去翻翻资料的,按lz的描述应该是以上第一种情况

|
估计程序异常终止了吧
你没有设置alarm信号的处理动作
加一段

void foo(int a) {}
signal(SIGALRM,foo);

|


我也遇到过,发现很多函数都不会被信号中断.

你只能用select来做超时了。

|

闹钟信号缺省行为是终止程序
你加一下信号处理函数看啊

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • socket accept问题,大家指教。
  • 初学socket,求教关于listen和accept关系的问题。
  • 请教一个网络编程问题,accept函数的,在线等,急。。。
  • 新手请教一个select accept 问题 ?
  • accept函数的问题
  • 一个关于accept()的问题。
  • openssl的ssl_accept丢包问题
  • configure: error: no acceptable C compiler found in $PATH 什么问题啊?
  • Linux 中c网络编程,accept函数的问题,请大家指点,谢谢
  • linux socket编程 accept 返回值的问题
  • close掉socket后,在accept了1024次后,出现打开文件最大限制1024的问题
  • 使用socket的accept()函数时Interrupted system call问题
  • (菜鸟飞飞) accept后创建的socket描述符问题
  • socket 编程中的 Accept函数问题
  • linux socket 中 accept() 问题
  • 小白请教关于Listen、accept、信号处理函数、waitpid的几个问题
  • 帮忙看下socket中的accept函数的问题(只剩30分了,大家别嫌少哈)
  • java命名空间java.net类httpurlconnection的类成员方法: http_accepted定义及介绍
  • Accept() 返回0,请问是怎么回事 ?
  • java命名空间java.awt.event类keyevent的类成员方法: vk_accept定义及介绍
  • iptables的默认策略与accept的疑问
  • java命名空间java.net类httpurlconnection的类成员方法: http_not_acceptable定义及介绍
  • accept的多线程在这里是如何体现的?
  • java命名空间javax.swing类jfilechooser的类成员方法: accept定义及介绍
  • accept返回-1的原因
  • java命名空间java.net接口cookiepolicy的类成员方法: accept_none定义及介绍
  • accept函数为何返回0???
  • java命名空间java.net接口cookiepolicy的类成员方法: accept_all定义及介绍
  • 请教LINUX 中 服务端 accept 函数
  • java命名空间java.net类socketimpl的类成员方法: accept定义及介绍
  • 为何我close了 accept不立即返回


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3