一、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超时的几种实现相关推荐

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

    客户端C API 在C API中调用mysql_options()来设置mysql_init() 所创建的连接对象的属性,使用这三个选项可以设置连接超时和读写超时,单位都是秒.读写超时达到后C API ...

  2. 【网络IO】(二)多路复用器——内核级介绍

    前言 在这个系列的上一篇文章中,我们介绍过网络IO中的两种IO模型--BIO与NIO,但这两种模型各有缺陷. BIO将系统资源浪费在了线程调度上,而NIO将系统资源浪费在了用户态与内核态的切换上. 为 ...

  3. mysql io模型_5种网络IO模型

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

  4. 5种网络IO模型:阻塞IO、非阻塞IO、异步IO、多路复用IO、信号驱动IO

    目录 前言 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) 多路复用IO(IO multiplexing) 异步IO(Asynchronous I/O) 模型间的区别 ...

  5. 五种网络IO模型详解

    一 IO操作本质 数据复制的过程中不会消耗CPU # 1 内存分为内核缓冲区和用户缓冲区 # 2 用户的应用程序不能直接操作内核缓冲区,需要将数据从内核拷贝到用户才能使用 # 3 而IO操作.网络请求 ...

  6. 大白话详解5种网络IO模型

    1 前言 我们都知道,为了实现高性能的通信服务器,BIO在高并发的情况下会出现性能急剧下降的问题,甚至会由于创建过多线程而导致系统OOM.因此在Java业界,BIO的性能问题一直被开发者所诟病,所幸的 ...

  7. 5种网络IO模型介绍

    5种网络IO模型介绍 IO 模型分为以下几种: 阻塞IO 非阻塞IO 信号驱动IO IO多路复用 异步IO 前四个为同步IO 1 阻塞IO 一个IO操作需要两步: 等待数据和拷贝数据. blockin ...

  8. linux 网络io命令详解,Linux下五种网络IO模型详解

    本文我们主要来了解一下Unix/Linux下5种网络IO模型:blocking IO, nonblocking IO, IO multiplexing, signal driven IO, async ...

  9. 因为取了个快递我搞懂了五种网络IO模型

    五种网络IO模型 目录 前段时间,我有个朋友因为拿快递和家里闹别扭了,今天我就借这事来讲讲五大网络模型 阻塞IO模型 第一天: 刘:今天因为拿快递被我妈骂了一顿 我:说来听听 刘:我本来在家里打扫家务 ...

最新文章

  1. 最低售价17999元,华为发布新一代折叠屏手机Mate X2,将首批升级HarmonyOS
  2. 你必须要知道的架构知识~目录
  3. Markdown 编辑器的使用记录 (Typora)
  4. listdir完整路径
  5. java.lang包 下
  6. C语言 (条件编译#ifdef、#ifndef) (#if 常量,#if 1,#if 0)的用法
  7. 警告:‘xxxx’ 将随后被初始化
  8. 虚拟键码对照表与ASCII对照表的整理
  9. 《Reids 设计与实现》第十三章 Sentinel
  10. xml文件中同时满足多个条件_问与答81: 如何求一组数据中满足多个条件的最大值?...
  11. asc码转换 linux_Linux网络服务04——FTP文件传输服务
  12. 全卷积神经网络 图像语义分割实验:FCN数据集制作,网络模型定义,网络训练(提供数据集和模型文件,以供参考)
  13. Android 阿里云热修复
  14. php递归算法获取树形菜单数据TreeMenu代码实现
  15. 2021年中国柠檬酸供需现状与行业前景分析,受出口景气度上升价格持续上涨「图」
  16. 关系型数据库的发展历史
  17. TI PMP解决方案简介
  18. 二十一世纪大学英语读写教程(第三册)学习笔记(原文)——5 - America Seen with European Eyes(概说美国——欧洲人眼中的美国)
  19. 开源项目 ——API接口管理平台数据库原型设计(三)
  20. Java Stream来写算法01——自幂数(水仙花数)

热门文章

  1. Windows Media Player 控件的常用属性及方法
  2. 微软亚研提出VL-BERT:通用的视觉-语言预训练模型
  3. 从理论到实践,机器人SLAM技术详解
  4. 关于2016年房价的思考
  5. 近期发现的一些-20190519
  6. java 图形用什么组件标题_java图形用户界面设计Swing常用组件(阅读).ppt
  7. diy手工制作泡沫小球_废物利用手工DIY教程。一次性筷子变废为宝,手工制作木屋模型...
  8. SPRING事务传播特性
  9. 如何保证RabbitMQ消息队列的高可用?
  10. 如何查看本机端口_怎样查看Mac的端口号以及占用情况