一、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. html点击按钮删除session,删除sessionstorage
  2. soot——相关资源
  3. linux下如何批量替换多个文件中的某个字符串?
  4. 图Graph--农夫过河问题(BFS/DFS应用)
  5. 阿里菜鸟-算法(一面)
  6. 操作系统读写者问题实验报告_Linux操作系统存储子系统核心技术之硬盘与RAID
  7. Linux学习之路(2-1)文件、目录与磁盘格式
  8. 禁用win10触摸屏手势_怎样禁用、启用Win10平板边缘滑动手势
  9. DeepFaceLab 2 merge阶段参数
  10. 通过docker创建Nginx容器并运行Vue项目(可用https进行访问)
  11. sqlserver 18456登录错误处理
  12. GDI+ 绘图闪烁解决方法
  13. Golang线程池gpool
  14. 【编程题】【Scratch三级】2021.03 接苹果
  15. 检查excel指定列中是否有错别字存在
  16. iOS企业版app部署到自己的服务器
  17. Hadoop 3.2.1 【 YARN 】源码分析 : DefaultContainerExecutor 浅析
  18. centos 7 dnf命令的安装
  19. 带语音的计算机,哪些电脑提醒软件带语音提醒?
  20. centos7.0下搭建论坛Discuz3.4详细步骤

热门文章

  1. (转)SQL操作全集
  2. macos安装homebrew
  3. 126.数据链路层有哪些协议?
  4. Lintcode 973 解题思路及c++代码
  5. Qt-QTableWidget设置只能选中一行
  6. file的open()和read()
  7. jquery 流程图_使用 JQuery.Flowchart
  8. 概括鸿蒙系统的优势,从开发语言分析鸿蒙系统有何优势
  9. 网站提示java已被阻止_Win7系统下打开网页提示应用程序已被JAVA安全阻止
  10. 使用 Servlet 读取表单数据