前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网络IO超时的几种实现

网络IO超时的几种实现

作者头像
magicsoar
发布2018-04-18 16:33:21
2K0
发布2018-04-18 16:33:21
举报
文章被收录于专栏:magicsoar

一、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

NewImage
NewImage

timer为最早一个超时的事件的超时值,或为一个默认值

NewImage
NewImage

二、libcurl库提供的超时配置

curl_easy_setopt(xxx, CURLOPT_CONNECTTIMEOUT_MS, yyy);尝试连接等待的时间,以毫秒为单位。如果设置为0,则无限等待。

curl_easy_setopt(xxx, CURLOPT_TIMEOUT_MS,yyy);   设置cURL允许执行的最长毫秒数

三、alarm/setitimer

通过指定间隔时间发出SIGALRM信号,在检查是否有时间超时

示例:

nginx定时器

NewImage
NewImage

nginx提供了利用settimer每隔一段时间 唤起epoll_wait,在检查是否有时间超时的方式,避免了频繁调用gettimeofday的系统函数

四、利用recv/send提供的超时参数配置

setsockopt 可以对socket句柄设置各种参数,其中包括了SO_SNDTIMEO, SO_RCVTIMEO两个选择,他们可以控制使用recv, send时候的超时时间,但该参数不是对所有的系统都生效的

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档