• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

UDP socket--sendto and recvfrom

武飞扬头像
RT-2022
帮助1

sendto

系统调用原型

sendto( int fd, void * buff, size_t len,unsigned int flags, struct sockaddr  *addr,int addr_len)

内核中处理流程:

sendto( int fd, void * buff, size_t len,unsigned int flags, struct sockaddr  *addr,int addr_len)
	__sys_sendto(fd, buff, len, flags, NULL, 0)
		1.通过fd获取sock,将数据转换成struct msghdr格式
			
		2.调用sock->ops->sendmsg,即inet_sendmsg
		inet_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
			1.bind
				如果socket没有bind过,源端口号、地址信息是没有的,需要自动分配,并将sock插入udp的hash表中,这些都通过bind完成
				
			2.调用udp协议的sendmsg函数,即udp_sendmsg
				

recvfrom

系统调用原型

recvfrom( int fd, void *ubuf, size_t size,unsigned int flags, struct sockaddr  *addr,int *addr_len)

内核中的处理流程

recvfrom( int fd, void *ubuf, size_t size,unsigned int flags, struct sockaddr  *addr,int *addr_len)
	__sys_recvfrom(fd, ubuf, size, flags, addr, addr_len)
		1.通过fd获取sock,构造struct msghdr msg

		2.调用sock->ops->recvmsg,即inet_recvmsg
		inet_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,int flags)
			sk->sk_prot->recvmsg(udp_recvmsg)			

struct msghdr

上面两个系统调用都是用这个结构体存放数据,定义如下:

struct msghdr {
	void		*msg_name;	/* ptr to socket address structure */
	int		msg_namelen;	/* size of socket address structure */
	struct iov_iter	msg_iter;	/* data */

	/*
	 * Ancillary data. msg_control_user is the user buffer used for the
	 * recv* side when msg_control_is_user is set, msg_control is the kernel
	 * buffer used for all other cases.
	 */
	union {
		void		*msg_control;
		void __user	*msg_control_user;
	};
	bool		msg_control_is_user : 1;
	__kernel_size_t	msg_controllen;	/* ancillary data buffer length */
	unsigned int	msg_flags;	/* flags on received message */
	struct kiocb	*msg_iocb;	/* ptr to iocb for async requests */
};
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfcfje
系列文章
更多 icon
同类精品
更多 icon
继续加载