epoll模型网络编程知识要领

1、程序初始化

创建监听socket

调用bind函数绑定ip地址、port端口号

调用listen函数监听

调用epoll_create函数创建epollfd

调用epoll_ctrl函数将listenfd绑定到epollfd上,监测listenfd的读事件

在一个无限循环中,调用epoll_wait函数等待事件发生

2、处理客户端请求

1、客户端连接

操作系统检测到监听fd上有读事件,导致epoll_wait从阻塞状态返回,上报监听fd上读事件,

调用accept函数接受连接,返回与客户端对应的的clientfd,将clientfd设置为非阻塞,调用epoll_ctrl将clientfd绑定到epollfd上,绑定时设置监听clientfd的读事件,此时还不能监听该clientfd的写事件。

2、客户端给服务器发数据

epoll_wait函数返回,并表明该clientfd上有读事件,调用recv函数接收数据,

若recv返回0,说明对端关闭了连接,调用epoll_ctrl将clientfd从epollfd上卸载,并关闭该clientfd;

若recv返回大于0,说明收到了数据,将数据存起来,根据协议格式解包。如果是LT模式,则可以调用任意次recv收数据,如果是ET模式,必须一直调用recv直到数据收完,收完标志(recv返回-1,并且错误码为EWOULDBLOCK)

3、服务器给客户端发数据

一般直接调用send发数据,如果数据太大或tcp窗口太小数据发不出去(send返回-1,错误码是EWOULDBLOCK,需要判断是否有剩余数据),调用epoll_ctrl将clientfd绑定到epollfd上,监听该clientfd写事件,如果epoll_wait返回了并告诉clientfd上有写事件,继续发数据,如果数据还是发送不完,继续等待下一次写事件,一旦数据全部发完,移除epoll上该clientfd的写事件监听。


学习链接:https://github.com/0voice

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96314.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

15-day12LLM结构变化、位置编码和投机采样

多头机制transformer结构归一化层选择 归一化层位置归一化层类型激活函数Llama2结构MoE架构 混合专家模型DeepSeek MLA为何需要位置编码目前的主流位置编码正余弦位置编码可学习位置编码ROPE旋转位置编码推导参考: https://spaces.ac.cn/archives/8265 https://zhua…

记录 docker容器打包成镜像 在其他服务器快速启动镜像和容器

我有个nginx服务器 需要在其他服务器直接部署使用 里面都是完整的 使用 docker ps 查看容器id 进行打包成镜像docker commit [容器ID或名称] 新镜像名:版本 docker commit 28f60e2206b2 my-nginx-custom:v1镜像保存成文件 docker save -o my-nginx-custom.tar my-nginx-custom:…

使用LLaMA-Factory对大模型进行微调-详解

书接上回 启动llama Factory可视化页面 llamafactory-cli webui 如果想后台运行 使用 nohup llamafactory-cli webui &浏览器访问 http://127.0.0.1:7860/配置项主要参数: 参考: https://docs.coreshub.cn/console/compute_platform/help/llama_factory/ 模型路径 : 解…

【AI】录制自动生成UI自动化脚本

命令行输入:npx playwright codegen https://myerp.dmyc.XXX.com:9443/打开的浏览器上操作,会自动录制,并生成自动化脚本

深度剖析字节跳动VeOmni框架

背景与设计动机 随着推荐系统和AI模型走向多模态、多任务的趋势,字节跳动面临着训练、迭代效率和系统复杂度的双重挑战。一方面,各类业务(如新闻推荐、短视频、图文广告、电商带货等)都需要处理文本、图像、视频、音频等多种输入模…

OCR库pytesseract安装保姆级教程

本文将介绍使用工具安装OCR库pytesseract的详细流程。 Anaconda安装教程参考Anaconda安装保姆级教程。 目录 一、工具安装 二、创建虚拟环境 三、安装pytesseract 总结 一、工具安装 点击链接前往官网codetou.com,下载安装最新版即可,本篇博客以抠头…

开源im即时通讯软件开发社交系统全解析:安全可控、功能全面的社交解决方案

在即时通讯与社交需求日益增长的今天,一款安全、稳定、功能全面的聊天软件成为不少团队和开发者的刚需。但市面上多数聊天 APP 要么依赖第三方插件,面临数据安全隐患和高额服务费;要么功能单一,难以满足复杂社交场景。今天给大家推…

残差神经网络(ResNet)

残差神经网络(Residual Neural Network,简称 ResNet)是深度学习领域的里程碑式模型,由何凯明等人在 2015 年提出,成功解决了深层神经网络训练中的梯度消失 / 爆炸问题,使训练超深网络(如 152 层…

学习嵌入式之驱动

一、基础搭建1.基础:c语言 软件编程语言 数据结构 软件编程思想2.驱动实现目标如果将Linux系统细致到开发板平台上? Liunx系统与硬件设备的适配3.自我能力的锻炼继续强化C语言锻炼大型代码阅读和分析能力学习大型项目的代码搭建和管理的能力…

在 Golang 中复用 HTTP 连接

问题提出最近在实现一个转发大模型调用请求的中转功能,涉及到要构造client发送请求的内容,一开始我每次都是新建一个client来发送请求,这样的代码实现存在一些问题——每次都要构造新的client,并且要重新建立连接。后面了解到在Go…

前端:el-upload文件上传与FormData 对象

<el-uploadclass"uploadDemo":limit"1"dragaccept".xls,.xlsx" <!-- 只保留Excel格式 -->:on-exceed"handleExceedFileLimit":on-change"handleChangeExcelFile":on-remove"handleRemoveExcelFile":bef…

自然处理语言NLP:One-Hot编码、TF-IDF、词向量、NLP特征输入、EmbeddingLayer实现、word2vec

文章目录自然语言处理&#xff08;NLP&#xff09;一、什么是自然语言处理&#xff08;NLP&#xff09;&#xff1f;二、NLP 的核心目标三、NLP 的主要应用方向&#xff08;应用场景&#xff09;四、NLP 的基本概念五、NLP 的基本处理流程1. 文本预处理2. 特征表示3. 模型选择与…

单词记忆-轻松记忆10个实用英语单词(13)

1. board含义&#xff1a;板子&#xff1b;董事会&#xff1b;登机 读音标注&#xff1a;/bɔːrd/ 例句&#xff1a;Write your name on the board. 译文&#xff1a;把你的名字写在板上。 衍生含义&#xff1a;董事会&#xff08;如“board of directors”&#xff09;&#…

Spring循环依赖源码调试详解,用两级缓存代替三级缓存

Spring循环依赖源码详解&#xff0c;改用两级缓存并实验 背景 最近一直在研究Spring的循环依赖&#xff0c;发现好像两级缓存也能解决循环依赖。 关于为何使用三级缓存&#xff0c;大致有两个原因 对于AOP的类型&#xff0c;保证Bean生命周期的顺序 对于有AOP代理增强的类型&am…

亚马逊BALL PIT球池外观专利侵权指控?不侵权意见书助力4条链接申诉成功!

儿童球池作为玩具品类中常见的一款产品&#xff0c;能够给儿童提供游乐的安全空间&#xff0c;深受亚马逊平台用户的喜爱。然而在近期&#xff0c;赛贝收到了部分亚马逊卖家的咨询&#xff0c;原因是他们在售的儿童球池产品链接被美国外观专利USD1009203S&#xff08;下称203专…

开源,LangExtract-Python库用LLM从非结构化文本提取结构化信息

摘要&#xff1a; LangExtract是一个Python库&#xff0c;利用大语言模型&#xff08;LLM&#xff09;根据用户定义指令从非结构化文本文档中提取结构化信息。它具备精确源定位、可靠结构化输出、长文档优化、交互式可视化、灵活LLM支持、适应任意领域等特点。可通过几行代码快…

如何根据团队技术能力选择最适合的PHP框架?

作为一名PHP开发者&#xff0c;面对众多的PHP框架&#xff0c;你是否曾感到选择困难&#xff1f;Laravel、Symfony、CodeIgniter、ThinkPHP…每个框架都有其特色和优势&#xff0c;但没有最好的框架&#xff0c;只有最适合的框架。而选择合适框架的关键因素之一&#xff0c;就是…

多人同时导出 Excel 导致内存溢出

1、问题根因分析多人同时导出Excel导致内存溢出&#xff08;OOM&#xff09;的核心原因是&#xff1a;在短时间内&#xff0c;大量数据被加载到JVM堆内存中&#xff0c;且创建了大量大对象&#xff08;如Apache POI的Cell、Row、Sheet对象&#xff09;&#xff0c;超过了堆内存…

深入 RAG(检索增强生成)系统架构:如何构建一个能查资料的大语言模型系统

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《深度探秘&#xff1a;AI界的007》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、LLM 的局限&#xff1a;模型知识“封闭” vs 现实知识…

linux tftpboot烧写地址分析

1&#xff0c;loadaddr 是一个环境变量&#xff0c;用于指定文件&#xff08;如内核镜像、设备树等&#xff09;加载到内存的起始地址。setenv loadaddr 0x82000000setenv loadaddr 0x80008000saveenv //.保存配置将 loadaddr 设置为 0x82000000&#xff0c;表示后续文件将加载…