[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