网络编程中的超时检测详细过程说明[2]

互联网技术 责任编辑:leton2008 2011-01-10

摘要:if(SELECT(sockfd+1,&rdfds,NULL,NULL,&tv)==0){超时处理}……三、设置定时器这种方法的原理是在从套接字接收数据之前先设置8秒钟的定时器。如果8秒钟内没有数据到来,内核产生的SIGALRM信号会中断当前的读操作。我们知道设置信号捕捉函数可以用signal函数或是sigaction函数。但这里只能使用sig

  if (SELECT(sockfd+1, &rdfds, NULL, NULL, &tv) == 0)

  {

  超时处理

  }

  ……

  三、 设置定时器

  这种方法的原理是在从套接字接收数据之前先设置8秒钟的定时器。如果8秒钟内没有数据到来,内核产生的SIGALRM信号会中断当前的读操作。我们知道设置信号捕捉函数可以用signal函数或是sigaction函数。但这里只能使用sigaction函数,因为signal设置的信号处理函数执行完后会重新执行被中断的操作。参考代码如下:

  void handler(int signo) // 自定义SIGALRM信号处理函数

  {

  return;

  }

  struct sigaction act; // 描述信号行为的变量

  ……

  sigaction(SIGALRM, NULL, &act); // 获取SIGALRM信号的属性

  act.sa_handler = handler; // 设置SIGALRM信号的处理函数

  act.sa_flags &= ~SA_RESTART; // 关闭重启被中断操作的选项

  sigaction(SIGALRM, &act, NULL); // 设置SIGALRM信号的属性

  alarm(8); // 设置8秒钟的定时器

  ……

  虽然我们是以套接字的读操作为例,实际上在很多类似的情况中,大家都可以酌情采取上面介绍的方法。巧妙的运用所学知识会让你的程序更加灵活和人性化。

[1]  [2]  

更多资料
更多课程
更多真题
温馨提示:因考试政策、内容不断变化与调整,本网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

通信工程师备考资料免费领取

去领取

距离2025 通信工程师考试

还有
  • 0
  • 3
  • 7
专注在线职业教育24年

信息系统项目管理师

信息系统项目管理师

!
咨询在线老师!