1、基本概念

   IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合:
  (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。
  (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。
  (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。
  (4)如果一个服务器即要处理TCP,又要处理UDP,一般要使用I/O复用。
  (5)如果一个服务器要处理多个服务或多个协议,一般要使用I/O复用。

  与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。

2、select函数

该函数准许进程指示内核等待多个事件中的任何一个发送,并只在有一个或多个事件发生或经历一段指定的时间后才唤醒。函数原型如下:

#include <sys/select.h>
#include <sys/time.h>int select(int maxfdp1,fd_set *readset,fd_set *writeset,fd_set *exceptset,const struct timeval *timeout)

linux网络编程之用select函数实现io复用(基于TCP)引发的思考相关推荐

  1. linux网络编程之用select方法实现io复用(基于udp)

    1.基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程.IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/ ...

  2. Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解

    Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解 (1)sockaddr struct sockaddr { unsigned  short  sa_ ...

  3. Linux网络编程之TCP状态转移

    Linux网络编程之TCP状态转移 一.TCP状态转移时序 二.半关闭及shutdown函数 一.TCP状态转移时序 TCP状态转移图: netstat -apn | grep client 查看客户 ...

  4. Linux网络编程之IP地址转换为无符号整数的方法

    Linux网络编程之IP地址转换为无符号整数的方法,代码如下:(没考虑异常输入) #include <stdio.h> #include <string.h> #include ...

  5. linux网络编程之socket(十一):套接字I/O超时设置方法和用select实现超时

    一.使用alarm 函数设置超时 C++ Code  1 2 3 4 5 6 7 8 9 10 11 12 13   void handler( int sig) { } signal(SIGALRM ...

  6. linux ioctl网络参数设置,Linux 网络编程之ioctl函数

    1.介绍 Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的 ...

  7. linux网络编程之socket(十):shutdown 与 close 函数 的区别

    假设server和client 已经建立了连接,server调用了close, 发送FIN 段给client(其实不一定会发送FIN段,后面再说),此时server不能再通过socket发送和接收数据 ...

  8. linux如何实现网络高级编程,嵌入式Linux网络编程之:网络高级编程-嵌入式系统-与非网...

    10.3  网络高级编程 在实际情况中,人们往往遇到多个客户端连接服务器端的情况.由于之前介绍的如connet().recv()和send()等都是阻塞性函数,如果资源没有准备好,则调用该函数的进程将 ...

  9. linux网络编程之Socket编程

    (1)socket套接字 1)在linux环境下,socket用于表示进程间网络通信的特殊文件类型,其本质是内核借助缓冲区形成的伪文件(不占磁盘空间,除此之外还有二进制文件,管道,字符文件). 2)伪 ...

最新文章

  1. Rancher Kubernetes Engine(RKE)正式发布:闪电般的Kubernetes安装部署体验
  2. python百分比堆积条形图_Pandas 堆积条形图中的元素顺序 - python
  3. CNN训练可视化特征图(tensorflow2.x实现)
  4. linux系统下载r软件安装,Linux安装R语言包
  5. 工大瑞普Cisco路由模拟器Dynamips
  6. 操作系统中进程的同步、互斥、通信的区别,进程与线程同步知识
  7. BFS - CH2906 - 武士风度的牛
  8. oracle 职业规划,数据库工程师的职业规划
  9. PostgreSQL任意字数模糊查询——pg_bigm
  10. Error installing to Instantiated: name=AttachmentStore state=Described
  11. Virtual Private Network(虚拟专用网络)详解
  12. linux下PNG、JEPG、JPG、Webp图片格式互转
  13. 九、cadence ic 5141 ——反相器版图绘制
  14. prusai3打印机使用教程_打印虎原创RepRapPrusai33D打印机校准图解教程系列之二.pdf...
  15. 自制jlink-ob
  16. Kubernetes集群中Pod间文件拷贝
  17. 网络对抗 Exp6 信息收集与漏洞扫描 20154311 王卓然
  18. 【Flutter】如何完成一个透明沉浸式状态栏
  19. 正规 中国电信的黑莓手机官方ROM下载地址开放了
  20. “BillGates”Linux 僵尸网络被用于发动大规模 DDoS 攻击

热门文章

  1. 都 2021 年了,竟然有人搞大数据时忽略 JSON 而去研究用 C# 把 XML 转换为 XML 的技术...
  2. .Net Core 集成 Kafka
  3. Blazor VS 传统Web应用程序
  4. 使用 GB28181.Solution + ZLMediaKit + MediaServerUI 进行摄像头推流和播放
  5. .NET Core开发实战(第15课:选项框架:服务组件集成配置的最佳实践)--学习笔记...
  6. 代码演示C#各版本新功能
  7. dotNET面试题汇总系列连载(1):基础语法
  8. 动手造轮子:实现简单的 EventQueue
  9. .NET LINQ分析AWS ELB日志避免996
  10. 【 .NET Core 3.0 】框架之五 || JWT权限验证