一、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时候的超时时间,但该参数不是对所有的系统都生效的

网络IO超时的几种实现的更多相关文章

  1. MySQL的各种网络IO超时的用法和实现

    2016-04-06 赵伟 数据库开发者 客户端C API 在C API中调用mysql_options()来设置mysql_init() 所创建的连接对象的属性,使用这三个选项可以设置连接超时和读写 ...

  2. 5种网络IO模型

    5种网络IO模型(有图,很清楚)   同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到 ...

  3. 5种网络IO模型(有图,很清楚)

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...

  4. 【转载】5种网络IO模型

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...

  5. [Swift]Alamofire:设置网络请求超时时间【timeout】的两种方式

    两种方式作用相同,是同一套代码的两种表述. 第一种方式:集聚. 直接设置成员属性(全局属性),这种方法不能灵活修改网络请求超时时间timeout. 声明为成员属性: // MARK: - 设置为全局变 ...

  6. 【转】5种网络IO模型

    5种网络IO模型(有图,很清楚) IO多路复用—由Redis的IO多路复用yinch Linux中对文件描述符的操作(FD_ZERO.FD_SET.FD_CLR.FD_ISSET

  7. 五种网络IO模型以及多路复用IO中select/epoll对比

    下面都是以网络读数据为例 [2阶段网络IO] 第一阶段:等待数据 wait for data 第二阶段:从内核复制数据到用户 copy data from kernel to user 下面是5种网络 ...

  8.  打开APP  04 | 网络通信:RPC框架在网络通信上更倾向于哪种网络IO模型? 2020-02-26 何小锋

     打开APP  04 | 网络通信:RPC框架在网络通信上更倾向于哪种网络IO模型? 2020-02-26 何小锋

  9. 【网络IO系列】IO的五种模型,BIO、NIO、AIO、IO多路复用、 信号驱动IO

    前言 在上一篇文章中,我们了解了操作系统中内核程序和用户程序之间的区别和联系,还提到了内核空间和用户空间,当我们需要读取一条数据的时候,首先需要发请求告诉内核,我需要什么数据,等内核准备好数据之后 , ...

随机推荐

  1. Rotational Region CNN

    R2CNN 论文Rotational Region CNN for Orientation Robust Scene Text Detection与RRPN(Arbitrary-Oriented Sc ...

  2. dva.js 用法总结

    dva.js是阿里前端团队开发的一个基于react.redux.webpack的一个前端框架,他能够实现react-redux-webpack环境一键部署,能帮前端工程师节省不少环境搭建的时间.而且经 ...

  3. NGUI_Label

    五.Label是标签,一般是用来显示文字使用,当然NGUI的扩展性很强,可以通过添加相关的控件组成组合控件来进行复杂功能的使用. 1. 设置字体:可以设置NGUI中的字体,也可以设置Unity中的字体 ...

  4. elfinder中通过DirectoryStream.Filter实现筛选隐藏目录(二)

    今天还是没事看了看elfinder源码,发现之前说的两个版本实现都是基于不同的jdkelfinder源码浏览-Volume文件系统操作类(1), 带前端页面的是基于1.6中File实现,另一个是基于1 ...

  5. 走近webpack(3)--图片的处理

    上一章,咱们学了如何用webpack来打包css,压缩js等.这一篇文章咱们来学习一下如何用webpack来处理图片.废话不多说,咱们开始吧. 首先,咱们随便找一张你喜欢的图片放到src/images ...

  6. webpack4新特性介绍

    导语: webpack是一个JS应用打包器, 它将应用中的各个模块打成一个或者多个bundle文件.借助loaders和plugins,它可以改变.压缩和优化各种各样的文件.它的输入是不同的资源,比如 ...

  7. eclipse打包

  8. express+mysqle

    var mysql=require('mysql'); var connection=mysql.createConnection({ host:'',//地址 port:'',//端口号 user: ...

  9. 设计模式 --> (17)状态模式

    状态模式 允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类.它有两种使用情况: (1)一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为. (2)一个操作中 ...

  10. mysql学习第一天

    Mysql语句语法 一.数据库定义语句(DDL) 1.alter database 语法 alter database 用于更改数据库的全局特性,这些特性存储在数据库目录中的db.opt文件中.要使用 ...