recv和send的真正作用

区分应用层的recvsend和内核中套接字的真正读取数据,要知道,TCP协议层是运行与内核当中,而通信是网卡直接的通信,因此,不要认为,没有调用recv就不会有数据,不管调没调用recv,只要对方send,线路上有数据,那么,协议就会从网卡里面读取该数据进内核的socket缓冲区中,而调用recv的真正作用只是把数据从socket内核缓冲区中把数据拷贝到应用层指定的buffer中,仅此而已,对协议完全没影响,同理,因为socket默认是全缓冲,如果没有setsocketopt的话,只有当socket内核缓冲区中的数据满了之后才会执行真正的发送数据,才会把数据从socket 的缓冲区中通过网卡把数据发送出去,其实就是执行真正的IO操作一样,因此,send的操作,只是把应用层的数据拷贝到socket的缓冲区中而已,并不表示把数据发送出去了,明白这几点。

为了更好地理解 Socket KCP 的工作原理及其函数之间的逻辑关系,我们需要明确它们各自的职责作用范围。Socket 主要是用于低层次的通信机制(如 TCP 或 UDP),而 KCP 则是一种基于 UDP 的可靠协议,它封装了更高级别的功能并提供类似于 TCP 的可靠性保证。 以下是关于这些关键函数的功能描述以及它们之间可能存在的调用关系: ### 基础概念 #### Socket 层面 - **Create**: 创建一个新的 socket 描述符,可以配置为不同类型 (TCP/UDP)。 - **Release**: 关闭已打开的 socket 连接,并清理相关的系统资源。 - **Send / Recv**: 分别代表向对端发送数据流或者从网络缓冲区读取消息的操作。 - **Input / Output**: 虽然不是标准 POSIX API 名称,在这里假设 input 表示处理输入的数据包;output 可能意味着构建要传出给对方的内容帧结构。 #### KCP 层面 - **Ikcp_Create/Ikcp_Release**: 构造与析构 IKCP 会话实例。 - **Ikcp_Update**: 定期驱动状态机运行,评估是否有未决事件发生比如 ACK 确认到期或是丢弃重传等情况。 - **Ikcp_Flush**: 将累积起来准备好的数据段生成最终形式提交至下层传输管道即我们的原始 udp socket 上去完成真正意义上的物理传递操作。 - **Ikcp_Input**: 当从前端接收到完整独立的一份来自远端机器携带序列号标识信息的有效负载时调用此方法解析重组恢复有序排列后的原始二进制块存储进接收缓存区内待后续应用提取利用. - **Ikcp_Send/Ikcp_Recv**: 用户空间层面发起数据写出请求或尝试获取可用新到达的数据元素拷贝副本. ### 具体流程图解示意如下: ``` +-------------------------------------------------------------+ | Application Layer | | | | Call -> [IKCP Create] -> Setup Session | | | | Periodically or upon event | | | | | Event Loop<-------------------+ | | V | | Call -> [Update Time Info ]->[IKCP Update]->Evaluate State | | If Data Ready To Send | | | V | | |Call->[Assemble Packet]->[IKCP Flush]->Transmit via UDPSocket| | On Receiving New Packets | | | V | | |Parse Header->Validate SeqNum->[IKCP Input]->Buffer InCache|<-+ | When Needed By App | | V | |[IKCP Recv] Get Next Available Message | | Destroy At End | | Call -> [IKCP Release] | +---------------------------------------------------------+ ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值