1、select/poll/epollnginx
int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,struct timeval *timeout);curl
timeout爲等待的指定時間,當有描述符符合條件 或是 超過超時時間的話,函數返回,能夠利用timeout完成超時的判斷socket
int poll ( struct pollfd * fds, unsigned int nfds, int timeout);函數
timeout爲等待的指定時間,當有描述符符合條件 或是 超過超時時間的話,函數返回,能夠利用timeout完成超時的判斷url
int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);spa
timeout爲等待的指定時間,當有描述符符合條件 或是 超過超時時間的話,函數返回,能夠利用timeout完成超時的判斷code
示例 使用epoll時的nginxorm
timer爲最先一個超時的事件的超時值,或爲一個默認值blog
2、libcurl庫提供的超時配置事件
curl_easy_setopt(xxx, CURLOPT_CONNECTTIMEOUT_MS, yyy
);嘗試鏈接等待的時間,以毫秒爲單位。若是設置爲0,則無限等待。
curl_easy_setopt(xxx, CURLOPT_TIMEOUT_MS,yyy
); 設置cURL容許執行的最長毫秒數
3、alarm/setitimer
經過指定間隔時間發出SIGALRM信號,在檢查是否有時間超時
示例:
nginx定時器
nginx提供了利用settimer每隔一段時間 喚起epoll_wait,在檢查是否有時間超時的方式,避免了頻繁調用gettimeofday的系統函數
4、利用recv/send提供的超時參數配置
setsockopt 能夠對socket句柄設置各類參數,其中包括了SO_SNDTIMEO, SO_RCVTIMEO兩個選擇,他們能夠控制使用recv, send時候的超時時間,但該參數不是對全部的系統都生效的