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相关推荐

  1. UDP协议 sendto 和 recvfrom 浅析与示例

    图片/在思考的樱木花道 UDP(user datagram protocol)用户数据报协议,属于传输层. UDP是面向非连接的协议,它不与对方建立连接,而是直接把数据报发给对方.UDP无需建立类如三 ...

  2. 【Socket网络编程】12. send()、recv()、sendto() 和 recvfrom() 函数解析

    send().recv().sendto()和recvfrom()函数解析 一般情况下,send().recv()在TCP协议下使用,sendto().recvfrom()在UDP协议下使用,也可以在 ...

  3. UDP sendto和recvfrom使用详解

    在网络编程中,UDP运用非常广泛.很多网络协议是基于UDP来实现的,如SNMP等.大家常常用到的局域网文件传输软件飞鸽传书也是基于UDP实现的. 本篇文章跟大家分享linux下UDP的使用和实现,主要 ...

  4. UDP 编程中的sendto() 与recvfrom()解析(转)

    sendto() 简述: 向一指定目的地发送数据. include int PASCAL FAR sendto( SOCKET s, const char FAR* buf, int len, int ...

  5. 【博客282】udp socket的recvfrom函数的一个易错问题

    内容: 当使用udp socket的recvfrom函数的时候,如果指定缓冲区大小不够会怎么样 问题: 当recvfrom接收udp socket的数据的时候,如果你用来接收的缓冲区太小,那么会出现让 ...

  6. linux sendto 速度慢,UDP Socket 广播中sendto()耗时过长

    UDP Socket 广播中,sendto()将数据发送到一个结尾为"255"的IP地址,应用中发现sendto()函数耗时过长.参考了"http://topic.csd ...

  7. Linux Kernel TCP/IP Stack — Socket Layer — TCP/UDP Socket 网络编程

    目录 文章目录 目录 TCP/UDP Socket 逻辑架构 创建 Socket 绑定 Socket 请求建立 Socket 连接 监听 Socket 接受请求 关闭连接 数据的发送和接收 send ...

  8. LINUX下UDP实现消息镜像通信,linux环境下基于udp socket简单聊天通信

    客户端代码:client.c /* * File: main.c * Author: guanyy * * Created on 20161202 * * 主要实现:客户端和服务端相互通信 */ #i ...

  9. UDP socket编程中使用connect

    转自:http://hi.baidu.com/rwen2012/item/545a39ba741307d085dd7957 标准的udp客户端开了套接口后,一般使用sendto和recvfrom函数来 ...

  10. UDP(socket)接和数据案例封装成C++代码

     配置QT下的pro文件 TEMPLATE = app CONFIG += console CONFIG -= app_bundle CONFIG -= qt LIBS += -lWs2_32 # ...

最新文章

  1. win10打开本机telnet客户端
  2. 每三个数换行 用C语言表示,关于换行符:使用fscanf()读取每行3个数字的文件,为什么“%d%d%d%* c”和“%d%d%d”一样好?...
  3. source insight 支持lua /ruby
  4. php apache 配置文件,Linux下apache支持PHP配置文件的方法
  5. 底层知识学习记录目录表
  6. Python中raise用法
  7. EL表达式中,param和requestScope的区别
  8. 【Spring Cloud】配置中心-Config
  9. MPEG-PS封装格式
  10. android 学习之SurfaceView
  11. 马哥linux2018目录,2018-01-02 马哥Linux学习笔记—Linux系统基础使用入门
  12. luogu p1330封锁阳光大学
  13. NYNU开学大作战之补番真开心
  14. http://msdn.itellyou.cn/
  15. 【Linux】安装网易云全攻略
  16. 渲染到纹理(Render To Texture, RTT)
  17. java jnlp 运行_java怎么运行jnlp文件 jnlp文件怎么打开
  18. 万字面试分享贴!从十二个角度解析面试全流程!附互联网公司Offer难度系数分析...
  19. Mysql教程(Windows)
  20. 信奥中的数学之入门组(面向小学四年级至六年级以及初一学生)

热门文章

  1. 科学研究设计一:什么是科学
  2. CMM3下的应用及改进
  3. NVIDIA 旧版显卡驱动下载及对应CUDA,CUDNN安装教程
  4. Flowable官方指定中国社区成立了
  5. 小米手机一键刷入bl锁重锁_OPPO手机完美安装Kingroot实现一键root
  6. 实现数据库连接池druid的工具类
  7. 大道至简,凯里亚德酒店成为酒店投资圈万众瞩目的“新”星
  8. 计算机在心理学实验中的应用举例,E-Prime在心理学实验中的应用 曾祥炎
  9. mac安装jad反编译工具
  10. Centos系统彻底卸载MySQL数据库