[C&C++中超时实现]
一般在LinuxC/C++中,可以使用:alarm()设置定时器的方式实现秒级超时,或者:select()、poll()、epoll()之类的异步复用IO实现毫秒级超时。也可以使用二次封装的异步io库(libevent,libev)也能实现。
一、使用alarm中用信号实现超时 (秒级超时)
说明:Linux内核connect超时通常为75秒,我们可以设置更小的时间如10秒来提前从connect中返回。这里用使用信号处理机制,调用alarm,超时后产生SIGALRM信号(也可使用select实现)
用alarym秒级实现 connect设置超时代码示例:
//信号处理函数
staticvoidconnect_alarm(intsigno) { debug_printf("SignalHandler"); return; } //alarm超时连接实现 staticvoidconn_alarm() { Sigfunc*sigfunc;//现有信号处理函数 sigfunc=signal(SIGALRM,connect_alarm);//建立信号处理函数connect_alarm,(如果有)保存现有的信号处理函数 inttimeout=5; //设置闹钟 if(alarm(timeout)!=0){ //...闹钟已经设置处理 } //进行连接操作 if(connect(m_Socket,(structsockaddr*)&addr,sizeof(addr))<0){ if(errno==EINTR){//如果错误号设置为EINTR,说明超时中断了 debug_printf("Timeout"); &nbs |
原文转自:http://www.kuqin.com/web/20120808/324135.html