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可以工作在边沿触发模式(高速模式),提高效率

相关推荐
叶北辰CHINA11 分钟前
【TCP三次握手+四次挥手(个人理解版本)】
网络·网络协议·tcp/ip
程序员黄老师12 分钟前
Ubuntu 下载软件包时,提示 但是它将不会被安装E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
linux·运维·ubuntu
鹿屿二向箔18 分钟前
C语言实现一个简单的点歌系统
c语言·开发语言
shulu21 分钟前
C语言中宏可变参数的使用
java·服务器·c语言
小黄酥24 分钟前
Python学习笔记--列表、字典、集合、元组
笔记·python·学习
Arms20624 分钟前
gradle 学习备忘
学习
元凌丶29 分钟前
Linux杂项知识
linux·运维·服务器
前进的K29 分钟前
leetcode 每日一题
算法·leetcode·职场和发展
代码总长两年半36 分钟前
FatFs文件系统的移植---STM32(标准库)
c语言·stm32·单片机·嵌入式硬件
y0k1n037 分钟前
《ORANGE‘s 一个操作系统的实现》-- ubuntu14.04下bochs2.3.5的配置与使用
linux·ubuntu