UDP socket--sendto and recvfrom
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
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01