linux c/c++网络编程之—epoll 模型

文章探讨了Linux内核2.4及以上版本引入的epoll模型,相较于select,epoll在处理高并发网络连接时展现出更高的性能,主要体现在连接数几乎不受限且采用异步通知机制。当网络事件发生时,epoll会主动触发,而select则依赖于轮询,导致在大量不活跃连接场景下效率降低。现代许多Linux网络库的底层实现都采用了epoll。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux 内核2.4版本以上开始支持epoll, epoll相比select性能有较大的提升,首先支持的连接数基本不受限制,只受到内存等系统资源的限制,epoll是一种异步通知机制,只有有网络事件发生了,就会主动加入监听集合,select需要轮训事件集合,这样效率会低很多,尤其连接数多,但大部分连接不活跃的情况,select 的效率会低很多。目前大部分的linux网络库,底层都是epoll实现。下面只是一个最基本的epoll模型的实例

#include  <stdio.h> 
#include  <iostream> 
#include  <unistd.h> 
#include  <fcntl.h> 
#include  <errno.h>
#include  <sys/types.h>
#include  <sys/socket.h> 
#include  <sys/epoll.h> 
#include  <netinet/in.h> 
#include  <arpa/inet.h> 
using namespace std;

class epoll_server
{
	public:
		epoll_server();
		virtual ~epoll_server();
		bool init(int port, int sock_count);
		bool init(const char* ip, int port, int sock_count);
		int epoll_server_wait(int time_out);
		int accept_new_client();
		int recv_data(int sock, char* recv_buf);
		int send_data(int sock, char* send_buf, int buf_l
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值