【网络编程】recv函数的本质是什么?

一、为什么说recv函数的本质是 “copy”?

recv是用于从网络连接(或其他 IO 对象)接收数据的函数,它的核心动作不是 “从网络上拉取数据”,而是 “把已经到达内核缓冲区的数据复制到用户程序的缓冲区”。

具体流程拆解:

1、数据先到内核缓冲区

当客户端发送的数据通过网卡到达服务器时,操作系统(内核)会先把数据从网卡读取到内核维护的缓冲区(内核空间的一块内存),这个过程由内核自动完成(通过硬件中断和驱动程序),不需要用户程序干预。

2、recv负责 “内核→用户” 的复制

用户程序调用recv时,指定一个自己的缓冲区(用户空间的内存),recv的作用就是把内核缓冲区中已经准备好的数据复制到这个用户缓冲区。
复制完成后,recv返回实际复制的字节数,用户程序才能从自己的缓冲区中读取到数据。

简单说:recv不直接 “接收网络数据”,而是 “搬运内核里已经收到的数据”,本质是一次内存数据的复制操作(从内核空间到用户空间)。

二、“调用recv时,内容已经从内核到本端了” 是什么意思?

这句话的核心是:recv能够成功返回有效数据时,数据早已到达服务器(本端)的内核缓冲区recv只是完成 “最后一步复制”。

分两种情况理解:

1、阻塞recv的场景:</

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值