想研究下linux的recv是怎么实现的,写了一半

本文通过分析Linux源码,逐步揭示了recv函数的工作原理。从在源码中寻找recv函数开始,发现其实际调用了kernel_recvmsg,接着在net/socket.c中找到了kernel_recvmsg的实现,它进一步调用了sock_recvmsg。接着,文章探讨了security_socket_recvmsg在安全层面的角色,该函数检查接收消息的权限。最后,介绍了security_ops结构体及其在安全操作中的重要性。
摘要由CSDN通过智能技术生成

1、

在linux源码中查找

find | /bin/grep sock| xargs  /bin/grep “ recv(“

查找recv函数,空格隔开,过滤了_recv之类的。

没有找到recv的函数定义。

 

放宽条件,在./fs/ncpfs/sock.c中找到了

 

static int _recv(struct socket *sock, void*buf, int size, unsignedflags)

{

     struct msghdr msg = {NULL, };

     struct kvec iov = {buf, size};

     return kernel_recvmsg(sock, &msg, &iov, 1,size, flags);

}

调用kernel_recvmsg

 

2、找kernel_recvmsg

在./net/socket.c中找到,

/**

 * kernel_recvmsg - Receive a message from asocket (kernel space)

 * @sock:      The socket to receive the message from

 * @msg:       Received message

 * @vec:       Input s/g array for message data

 * @num:       Size of input s/g array

 * @size:      Number of bytes to read

 * @flags:     Message flags (MSG_DONTWAIT, etc...)

 *

 * On return the msg structure contains thescatter/gather array passed in the

 * vec argument. The array is modified so thatit consists of the unfilled

 * portion of the original array.

 *

 * The returned value is the total number ofbytes received, or an error.

 */

int kernel_recvmsg(structsocket *sock, struct msghdr *msg,

            struct kvec*vec, size_t num, size_t size, int flags)

{

     mm_segment_toldfs = get_fs();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值