Linux服务器开发(LE和LT模式介绍)

本文介绍了Linux服务器开发中EPOLL的LE(边沿触发)和LT(水平触发)模式的区别。LE模式适用于非阻塞套接字,仅在数据接收或发送完成后触发事件;而LT模式支持阻塞和非阻塞,会在数据未完全读取或发送时持续触发事件。在使用LT模式处理EPOLLOUT时,需要注意在数据发送完成后移除可写事件的监控。
摘要由CSDN通过智能技术生成

前言

之前关于介绍了EPOLLONESHOT:《inux服务器开发epoll的使用(EPOLLONESHOT的作用及如何使用)长连接短连接,粘包问题》;
设置EPOLLONESHOT的目的是为了防止同时使用套接字connfd,每次重新使用connfd使用EPOLL_CTL_MOD将其重新加入epoll队列中才能被epoll_wait();检测到;回顾一下为什么使用EPOLLONESHOT;

简单点来讲就是:同一时间不应该有多个工作线程使用同一个connfd,否则会产生网络错误;而EPOLLONESHOT就是避免这种网络错误的产生;
假如不使用EPOLLONESHOT,如果服务器有工作线程正在处理connfd,而此时又触发了connfd的对应事件如EPOLLIN,此时服务器主线程又会根据事件产生一个新的工作线程,该工作线程处理的同样是ocnnfd,这样会造成同一时间connfd被多个线程使用,这样会产生网络错误;

在网络编程这里为例:epoll检测到的套接字分为两种类型,connfd,和listenfd;
其中listenfd经过accept属性转化变为connfd;
而connfd通过从内核事件检测队列中移除变为listenfd;但是如果不close(connfd);其属性仍然会存在,这里引出了一个 错误码errno==EAGAIN;我们可以根据该错误判断类型然后通过EPOLL_CTL_MOD,然后改变connfd在epoll中的属性变为connfd类型;

关于LE模式和LT模式的区别

使用方式上:

事件属性具有

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值