// 定义tcp_recvmsg函数,负责接收TCP消息 int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags, int *addr_len) { int cmsg_flags = 0, ret; // 初始化控制消息标志和返回值 struct scm_timestamping_internal tss; // 时间戳结构体 // 检查是否有错误消息需要处理 【这块...
int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, size_t len, int nonblock, int flags, int *addr_len) { struct tcp_sock *tp = tcp_sk(sk); int copied = 0; u32 peek_seq; u32 *seq; unsigned long used; int err; int target; /* Read at least this man...
*/inttcp_recvmsg(structkiocb*iocb,structsock*sk,structmsghdr*msg,size_t len,intnonblock,intflags,int*addr_len){structtcp_sock*tp=tcp_sk(sk);intcopied=0;u32 peek_seq;u32*seq;unsignedlongused;interr;inttarget;/* Read at least this many bytes */longtimeo;structtask_struct*user_recv=NULL...
recvmsg系统调用在tcp层的实现是tcp_recvmsg函数,该函数完成从接收队列中读取数据复制到用户空间的任务;函数在执行过程中会锁定控制块,避免软中断在tcp层的影响;函数会涉及从接收队列receive_queue,预处理队列prequeue和后备队列backlog中读取数据;其中从prequeue和backlog中读取的数据,还需要经过sk_backlog_rcv回调,该回...