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();