网络IO超时的几种实现
一、select/poll/epoll
int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,struct timeval *timeout);
timeout為等待的指定時間,當有描述符符合條件 ?或是 ?超過超時時間的話,函數返回,可以利用timeout完成超時的判斷
?
int poll ( struct pollfd * fds, unsigned int nfds, int timeout);
timeout為等待的指定時間,當有描述符符合條件 ?或是 ?超過超時時間的話,函數返回,可以利用timeout完成超時的判斷
?
int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);
timeout為等待的指定時間,當有描述符符合條件 ?或是 ?超過超時時間的話,函數返回,可以利用timeout完成超時的判斷
示例 使用epoll時的nginx
timer為最早一個超時的事件的超時值,或為一個默認值
?
二、libcurl庫提供的超時配置
curl_easy_setopt(xxx, CURLOPT_CONNECTTIMEOUT_MS, yyy);嘗試連接等待的時間,以毫秒為單位。如果設置為0,則無限等待。 curl_easy_setopt(xxx, CURLOPT_TIMEOUT_MS,yyy); ??設置cURL允許執行的最長毫秒數?
?
三、alarm/setitimer
通過指定間隔時間發出SIGALRM信號,在檢查是否有時間超時
示例:
nginx定時器
nginx提供了利用settimer每隔一段時間 喚起epoll_wait,在檢查是否有時間超時的方式,避免了頻繁調用gettimeofday的系統函數
?
?
四、利用recv/send提供的超時參數配置
setsockopt 可以對socket句柄設置各種參數,其中包括了SO_SNDTIMEO, SO_RCVTIMEO兩個選擇,他們可以控制使用recv, send時候的超時時間,但該參數不是對所有的系統都生效的
?
轉載于:https://www.cnblogs.com/magicsoar/p/8759429.html
總結
以上是生活随笔為你收集整理的网络IO超时的几种实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c# winForm DotNetBar
- 下一篇: Unity—移动