udp - IPv4 上面的 UDP 协议.

SYNOPSIS (总览)

#include <sys/socket.h>
#include
<netinet/in.h>

udp_socket = socket(PF_INET, SOCK_DGRAM,
0);

DESCRIPTION(描述)

这是一个 RFC768 中的用户数据报协议的实现. 它实现无连接的, 不可靠的数据报信息包服务.
信息包可能在它们传输到达之前重新排序或者重复. UDP 通过生成和检查校验和来俘获传输错误.

当创建一个 UDP 套接字时, 它的本地和远程地址是不确定的. 可以使用带一个有效目的地址作为参数的 sendto(2) 或者
sendmsg(2) 立即发送数据报.如果套接字上调用了 connect(2) 时, 则设置默认的目的地址,
数据报可以使用 send(2) 或者 write(2) 发送而不需要指定目的地址. 也可以通过传递一个地址给
sendto(2) 或者 sendmsg(2) 来发送到其它目的地址. 为了接收信息包,套接字必须首先用
bind(2) 绑定一个本地地址, 如果没有这么做, 套接字层在第一个用户接收请求时将自动分配一个本地端口.

所有接收操作只返回一个信息包. 当信息包小于所传递的缓冲区时, 则只返回那些数据, 当信息包大于所传递的缓冲区时,则截断信息包并设置
MSG_TRUNC 标志.

IP 选项可以使用描述于 ip(7) 中的套接字选项发送或接收. 只有打开了合适的 sysctl 时,
内核才处理它们(不过即使关闭了它们, 仍然会传递给用户). 参见 ip(7).

如果设置了 MSG_DONTROUTE 标志,则发送时目的地址必须指向一个本地接口地址, 而且信息包只发到该接口.

当 UDP 的总长超过接口 MTU(Maximum Transmission Unit 最大传输单元)时, UDP 会对信息包进行分段.
一个更为网络友好的可选方法是使用 path MTU discovery(路径MTU发现), 它描述于 ip(7) 中的
IP_PMTU_DISCOVER 部分.

ADDRESS FORMAT (地址格式)

UDP 使用 IPv4 的 sockaddr_in 地址格式,其描述于
ip(7) 中.

ERROR HANDLING (错误处理)

所有重大错误都会以错误返回值的方式传递给用户,
即使套接字没有连接亦如此.这种处理方式有别于许多其它的 BSD 套接字实现方法, 除非套接字连接上, 否则那些方法不会传递任何错误, Linux 的处理方式遵循
RFC1122 的要求.

为了与以前的代码兼容,可以设置 SO_BSDCOMPAT SOL_SOCKET 选项令只在套接字已连接的情况下接收远程错误(
EPROTOEMSGSIZE) 除外. 最好是修复代码并适当地处理错误, 而不要打开该选项. 本地产生的错误总是传递.

当打开了 IP_RECVERR 选项时, 所有错误可以存储在套接字错误队列中, 并可以通过带 MSG_ERRQUEUE
标识设置的 recvmsg(2) 来接收.

ERRORS (错误)

所有列在 socket(7) 或 ip(7) 中的错误都可以在一个 UDP
套接字上收发时收到.

ECONNREFUSED 没有与目的地址相关联的接收者. 这可能由于在前面一个通过该套接字发送的信息包而引发.

原文地址:https://www.cnblogs.com/fanweisheng/p/11101792.html

时间: 2024-10-12 05:23:13

udp - IPv4 上面的 UDP 协议.的相关文章

第29篇ip地址,mac地址 IPV4 IPV6 TCP UDP协议

回顾 2018-12-31 或者 2018.12.31 或者 2018*12*31 的正则表达式: [1-9]\d{3}(?P<sep>.)(1[12]|0?[1-9])(?P=sep)([12]\d|3[01]|0?[1-9])内容总览: ip地址 mac地址 IPV4 IPV6 TCP UDP协议 同一台机器的两个程序通讯-->文件 两台机器的两个程序之间通讯 -->网络 mac 每一台计算机的网卡 上面会有一个mac地址,也就是相当于改计算机在网络上的唯一身份表示 xx-xx

动态路由上的RIP协议配置

RIP理论部分 RIP路由协议工作原理: v 定期更新(Periodic Updates):每经过特定时间周期就发送更新信息.邻居(Neighbors):共享相同数据的路由器. v 广播更新(Broadcast Update):路由器首次被激活时,会使用最简单的方法,向广播地址发送更新信息. v 全路由表更新(Full Routing Table Update):广播它的整个路由表. RIP的度量值与更新时间: 在RIP中规定了跳数的最大值15,16跳视为不可达. RIP使用UDP协议,端口号为

关于取消TextFiled上面的灰色联想区域的问题

其实之前的项目就已经有这方面的问题了,我遇到了好几次TF上面的灰色的联想区域问题,我大部分都是先用iPhone5s去做,我坚决不会告诉你我只有5s的.. 于是我各种百度,各种问题,各种解决方法,但是我就是没看见我的问题方法. 其实这个问题只要调用一个属性就行了..可能问题太偏了吧... textfiled里面有个view属性,下面有个correction 和 spell checking 只要把这两个属性设为NO,问题一般就能解决了(→这只是针对Xib的空间来说的,要是我是手写的代码怎么办呢..

iOS 获取UIWebView上面的按钮点击事件

UIWebView的一些用法总结的网址 http://blog.csdn.net/zhaoweixing1989/article/details/13021513 在网上看到很多文章都说iOS的UIWebView比较耗内存,在我的项目中,最开始我也是用UIWebView来加载网页的.刚开始加载的是自己拼接成的Html,后来在Html中加入一个按钮,点击之后用当前的UIWebView去加载网络上的网页.程序跑起来发现非常耗内存,加载几个网上的网页之后就爆内存警告了,不处理的话很容易被评估拒掉app

架构上面的东西,越少越好

比如说 传统的php web程序,不管你是nginx 还是httpd 进来,还是要经过php 进来,然后连mysql ,redis ,mongodb ,不能说你用了nginx 就快了多少. nginx真正牛笔之处在于第三方模块,比如说lua ,本身可以处理httpd的请求,还可以联合其他模块,比如说drizzle 可以直接访问mysql .这样就完全绕过了php 这个大家伙,性能提高那是必须的.光用nginx 当web server ,没啥优势,其实. 当然这个是建立在你能自行开发网站或者2次开

python获取动态网站上面的动态加载的数据(初级)

我们在处理一些网站数据的时候,有时候我们需要的数据很多都是动态加载的,而不都是静态的,以下以一个实例来介绍简单的获取动态数据,首先申明本人小白,还在学习python中,这个方法还是比较笨拙的,但是对于初学者还是需要知道的. 首先我们的要求是获取下面文章的参考文献: 刚刚开始,我的想法是使用lxml.BeatifulSoup.正则表达式来处理,这几个是处理静态网站的常用方法,查看网页源码我们会发现相应的div里面是空,也就是说上面的数据不是静态的,而是后面动态加载的,利用googl浏览器可以看到:

如何避免在简单业务逻辑上面的细节上面出错

很多时候对于新的开发人员最容易犯得错误就是细节问题.对于如何在业务逻辑上面的细节上面出错,有很多要考虑的地方,但是如何保证不出错呢?需要把每一个考虑到的点都能列出来.然后按照列出来的点来考虑和编程可能对于细节出错上面有很大的帮助.然后是总结有那几种不同形式的业务逻辑,然后那些事通用的,那些是需要考虑的. 我这边只是单纯列出几点需要考虑的.1.字段是否可为空. 2.字段长度. 3.字段可以输入的格式是什么,只能是数字还是说别的. 4.字段之间有没有关联,直接是否存在关系. 5.操作会造成什么影响,

如何批量清除128组节点db上面的过期的binlog,释放磁盘空间。(转)

如果10台以内的db的话,自己手动ssh进去,clean就足以,但是上百台呢,就要写脚本了.大概思路:在 一台db跳转机上面, 写一个脚本,访问slave,远程获取正在复制的master上面的binlog位置, 然后再远程去purge master上面的binlog. 1,  建立slave dbserver列表 slavelist; 一个slave一行. 2,远程获取slave db上面的binlog位置以及slave的master主机名(也许是ip地址) 3,拿到binlog位置以及mast

【项目】开源中国上面的项目部署

一.官方网站 网站: https://git.oschina.net/ 注册.登陆 二.终端操作 打开终端,输入 # 切换目录,MAC中目录的第一个字符如果是 `.` 表示改文件夹是隐藏文件夹 $ cd ~/.ssh # 查看当前目录文件 $ ls # 生成 RSA 密钥对 # 1> "" 中输入个人邮箱 # 2> 提示输入私钥文件名称,直接回车 # 3> 提示输入密码,可以随便输入,只要本次能够记住即可 $ ssh-keygen -t rsa -C "[e