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_sendmsginet_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 msg2.调用sock->ops->recvmsg,即inet_recvmsginet_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 */
};
UDP socket--sendto and recvfrom相关推荐
- UDP协议 sendto 和 recvfrom 浅析与示例
图片/在思考的樱木花道 UDP(user datagram protocol)用户数据报协议,属于传输层. UDP是面向非连接的协议,它不与对方建立连接,而是直接把数据报发给对方.UDP无需建立类如三 ...
- 【Socket网络编程】12. send()、recv()、sendto() 和 recvfrom() 函数解析
send().recv().sendto()和recvfrom()函数解析 一般情况下,send().recv()在TCP协议下使用,sendto().recvfrom()在UDP协议下使用,也可以在 ...
- UDP sendto和recvfrom使用详解
在网络编程中,UDP运用非常广泛.很多网络协议是基于UDP来实现的,如SNMP等.大家常常用到的局域网文件传输软件飞鸽传书也是基于UDP实现的. 本篇文章跟大家分享linux下UDP的使用和实现,主要 ...
- UDP 编程中的sendto() 与recvfrom()解析(转)
sendto() 简述: 向一指定目的地发送数据. include int PASCAL FAR sendto( SOCKET s, const char FAR* buf, int len, int ...
- 【博客282】udp socket的recvfrom函数的一个易错问题
内容: 当使用udp socket的recvfrom函数的时候,如果指定缓冲区大小不够会怎么样 问题: 当recvfrom接收udp socket的数据的时候,如果你用来接收的缓冲区太小,那么会出现让 ...
- linux sendto 速度慢,UDP Socket 广播中sendto()耗时过长
UDP Socket 广播中,sendto()将数据发送到一个结尾为"255"的IP地址,应用中发现sendto()函数耗时过长.参考了"http://topic.csd ...
- Linux Kernel TCP/IP Stack — Socket Layer — TCP/UDP Socket 网络编程
目录 文章目录 目录 TCP/UDP Socket 逻辑架构 创建 Socket 绑定 Socket 请求建立 Socket 连接 监听 Socket 接受请求 关闭连接 数据的发送和接收 send ...
- LINUX下UDP实现消息镜像通信,linux环境下基于udp socket简单聊天通信
客户端代码:client.c /* * File: main.c * Author: guanyy * * Created on 20161202 * * 主要实现:客户端和服务端相互通信 */ #i ...
- UDP socket编程中使用connect
转自:http://hi.baidu.com/rwen2012/item/545a39ba741307d085dd7957 标准的udp客户端开了套接口后,一般使用sendto和recvfrom函数来 ...
- UDP(socket)接和数据案例封装成C++代码
配置QT下的pro文件 TEMPLATE = app CONFIG += console CONFIG -= app_bundle CONFIG -= qt LIBS += -lWs2_32 # ...
最新文章
- win10打开本机telnet客户端
- 每三个数换行 用C语言表示,关于换行符:使用fscanf()读取每行3个数字的文件,为什么“%d%d%d%* c”和“%d%d%d”一样好?...
- source insight 支持lua /ruby
- php apache 配置文件,Linux下apache支持PHP配置文件的方法
- 底层知识学习记录目录表
- Python中raise用法
- EL表达式中,param和requestScope的区别
- 【Spring Cloud】配置中心-Config
- MPEG-PS封装格式
- android 学习之SurfaceView
- 马哥linux2018目录,2018-01-02 马哥Linux学习笔记—Linux系统基础使用入门
- luogu p1330封锁阳光大学
- NYNU开学大作战之补番真开心
- http://msdn.itellyou.cn/
- 【Linux】安装网易云全攻略
- 渲染到纹理(Render To Texture, RTT)
- java jnlp 运行_java怎么运行jnlp文件 jnlp文件怎么打开
- 万字面试分享贴!从十二个角度解析面试全流程!附互联网公司Offer难度系数分析...
- Mysql教程(Windows)
- 信奥中的数学之入门组(面向小学四年级至六年级以及初一学生)