当前位置: 技术问答>linux和unix
如何使gethostbyname()超时返回,不要永远阻塞
来源: 互联网 发布时间:2015-12-08
本文导语: 我的程序是不能阻塞的,否则后果很严重。但是又要在循环中用到gethostbyname(),这个函数是阻塞的,所以当dns服务器访问不到或者出故障的时候就阻塞住了,造成很严重的后果,请教两个问题: (1)它是永远阻塞的吗...
我的程序是不能阻塞的,否则后果很严重。但是又要在循环中用到gethostbyname(),这个函数是阻塞的,所以当dns服务器访问不到或者出故障的时候就阻塞住了,造成很严重的后果,请教两个问题:
(1)它是永远阻塞的吗?缺省回返回吗?
(2)有没有办法弄个超时时间,一段时间解析不能成功时就返回个超时错误。
(1)它是永远阻塞的吗?缺省回返回吗?
(2)有没有办法弄个超时时间,一段时间解析不能成功时就返回个超时错误。
|
1)不会永远阻塞
2)可以自己设定时器,思路如下:
void alarm_handle(int);//定时器的处理函数
int main()
{
alarm(1);//设置定时器
signal(SIGALRM, alarm_handle);//设置信号SIGALRM的处理处理函数
gethostbyname();
清除alarm信号;
...
}
void alarm_handle(int)
{
longjump();//跳转到gethostbyname()之后
}
注:跨函数的跳转请见一书
|
可以通过网卡名来获得ip地址。