Linux 软件编程多路复用tcp

1.select的缺点:

1.select监听的文件描述符集合是一个数组,有上限(1024个)

2.select监听的文件描述符集合在应用层,内核层监听事件后需要传递给用户层带来资源开销

3.select需要用户手动查找产生事件的文件描述符

4.select只能工作在水平触发模式(低速模式)而无法工作在边沿触发模式(高速模式)

2.poll

int poll(struct pollfd *fds, nfds_t nfds, int timeout);

功能:

监听文件描述符集合,工作方式类似于select

参数:

fds:文件描述符集合首地址

nfds:文件描述符集合的数组的长度

timeout:超时时间,单位毫秒,-1表示永久等待

返回值:

成功返回产生事件文件描述符个数

失败返回-1

超时仍然没有产生的事件返回0

struct pollfd {

int fd; /* file descriptor */

short events; /* requested events */

short revents; /* returned events */

};

1.poll的缺点:

1.poll监听的文件描述符集合在应用层,内核层监听事件后需要传递给用户层带来资源开销

2.poll需要用户手动查找产生事件的文件描述符

3.poll只能工作在水平触发模式(低速模式)而无法工作在边沿触发模式(高速模式)

3.epoll

1.epoll_create

int epoll_create(int size);

功能:

在内核层创建一张epoll监听的事件表

参数:

size:监听的事件表大小

返回值:

成功返回新的文件描述符

失败返回-1

2.epoll_ctl

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

功能:

管理内核中epoll事件表

参数:

epfd:文件描述符

op: EPOLL_CTL_ADD 添加客户端

EPOLL_CTL_MOD 修改客户端

EPOLL_CTL_DEL 删除客户端

fd:文件描述符

event:事件结构体

返回值:

成功返回0

失败返回-1

typedef union epoll_data {

void *ptr;

int fd;

uint32_t u32;

uint64_t u64;

} epoll_data_t;

struct epoll_event {

uint32_t events; /* Epoll events */

epoll_data_t data; /* User data variable */

};

events:EPOLLIN EPOLLOUT EPOLLET

3.epoll_wait

int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);

功能:

监听epfd对应的事件表中是否有事件发生

参数:

epfd:文件描述符

events:存放产生事件的数组空间首地址

maxevents:最多存放数组元素个数

timeout:超时时间,单位毫秒,-1表示永久等待

返回值:

成功返回实际发生事件的个数

失败返回-1

超时仍然没有产生事件返回0

epoll的优点:

1.epoll没有文件描述符上限限制

2.epoll监听的事件表在内核层,内核监听事件不需要操作用户层空间提高效率

3.epoll会获得产生事件的文件描述符,不需要用户查找

4.epoll可以工作在边沿触发模式(高速模式),提高效率

相关推荐
Yupureki1 小时前
从零开始的C++学习生活 12:AVL树全面解析
c语言·数据结构·c++·学习·visual studio
czy87874751 小时前
用C语言实现组合模式
c语言·组合模式
yy7634966681 小时前
WPF 之 简单高效的Revit多语言支持方案
java·大数据·linux·服务器·wpf
我是华为OD~HR~栗栗呀1 小时前
华为od面经-23届-Java面经
java·c语言·c++·python·华为od·华为·面试
逐步前行4 小时前
C标准库--C99--布尔型<stdbool.h>
c语言·开发语言
SunnyKriSmile4 小时前
C语言译码操作
c语言·算法·if语句·译码操作·switch语句
傻童:CPU4 小时前
C语言需要掌握的基础知识点之线性表
c语言·1024程序员节
小小小CTFER4 小时前
理论题] 2025 年 “技耀泉城” 海右技能人才大赛网络安全知识竞赛题目(二)
算法·安全·web安全
Heavy sea4 小时前
Linux串口应用编程
linux·c语言·1024程序员节
再睡一夏就好4 小时前
【C++闯关笔记】详解多态
c语言·c++·笔记·学习·语法·1024程序员节