linux网络编程之用select函数实现io复用(基于TCP)引发的思考
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)引发的思考相关推荐
- linux网络编程之用select方法实现io复用(基于udp)
1.基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程.IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/ ...
- Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解
Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解 (1)sockaddr struct sockaddr { unsigned short sa_ ...
- Linux网络编程之TCP状态转移
Linux网络编程之TCP状态转移 一.TCP状态转移时序 二.半关闭及shutdown函数 一.TCP状态转移时序 TCP状态转移图: netstat -apn | grep client 查看客户 ...
- Linux网络编程之IP地址转换为无符号整数的方法
Linux网络编程之IP地址转换为无符号整数的方法,代码如下:(没考虑异常输入) #include <stdio.h> #include <string.h> #include ...
- 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 ...
- linux ioctl网络参数设置,Linux 网络编程之ioctl函数
1.介绍 Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的 ...
- linux网络编程之socket(十):shutdown 与 close 函数 的区别
假设server和client 已经建立了连接,server调用了close, 发送FIN 段给client(其实不一定会发送FIN段,后面再说),此时server不能再通过socket发送和接收数据 ...
- linux如何实现网络高级编程,嵌入式Linux网络编程之:网络高级编程-嵌入式系统-与非网...
10.3 网络高级编程 在实际情况中,人们往往遇到多个客户端连接服务器端的情况.由于之前介绍的如connet().recv()和send()等都是阻塞性函数,如果资源没有准备好,则调用该函数的进程将 ...
- linux网络编程之Socket编程
(1)socket套接字 1)在linux环境下,socket用于表示进程间网络通信的特殊文件类型,其本质是内核借助缓冲区形成的伪文件(不占磁盘空间,除此之外还有二进制文件,管道,字符文件). 2)伪 ...
最新文章
- Rancher Kubernetes Engine(RKE)正式发布:闪电般的Kubernetes安装部署体验
- python百分比堆积条形图_Pandas 堆积条形图中的元素顺序 - python
- CNN训练可视化特征图(tensorflow2.x实现)
- linux系统下载r软件安装,Linux安装R语言包
- 工大瑞普Cisco路由模拟器Dynamips
- 操作系统中进程的同步、互斥、通信的区别,进程与线程同步知识
- BFS - CH2906 - 武士风度的牛
- oracle 职业规划,数据库工程师的职业规划
- PostgreSQL任意字数模糊查询——pg_bigm
- Error installing to Instantiated: name=AttachmentStore state=Described
- Virtual Private Network(虚拟专用网络)详解
- linux下PNG、JEPG、JPG、Webp图片格式互转
- 九、cadence ic 5141 ——反相器版图绘制
- prusai3打印机使用教程_打印虎原创RepRapPrusai33D打印机校准图解教程系列之二.pdf...
- 自制jlink-ob
- Kubernetes集群中Pod间文件拷贝
- 网络对抗 Exp6 信息收集与漏洞扫描 20154311 王卓然
- 【Flutter】如何完成一个透明沉浸式状态栏
- 正规 中国电信的黑莓手机官方ROM下载地址开放了
- “BillGates”Linux 僵尸网络被用于发动大规模 DDoS 攻击
热门文章
- 都 2021 年了,竟然有人搞大数据时忽略 JSON 而去研究用 C# 把 XML 转换为 XML 的技术...
- .Net Core 集成 Kafka
- Blazor VS 传统Web应用程序
- 使用 GB28181.Solution + ZLMediaKit + MediaServerUI 进行摄像头推流和播放
- .NET Core开发实战(第15课:选项框架:服务组件集成配置的最佳实践)--学习笔记...
- 代码演示C#各版本新功能
- dotNET面试题汇总系列连载(1):基础语法
- 动手造轮子:实现简单的 EventQueue
- .NET LINQ分析AWS ELB日志避免996
- 【 .NET Core 3.0 】框架之五 || JWT权限验证