一、基本UDP套接口编程

  1. #include <sys/socket.h>
  2.  
  3. ssize_t recvfrom(int sockfd, void *buff, size_t nbytes, int flags,
  4. struct sockaddr *from, socklen_t *addrlen);
  5. ssize_t sendto(int sockfd, const void *buff, size_t nbytes, int flags,
  6. const struct sockaddr *to, socklen_t addrlen);
  7. 返回:成功读写字节数,出错-1
    socket:套接字文件描述符
    buff:缓存
    nbytes:缓存长度
    flags:简单UDP中不需要,recvsendrecvmsgsendmsg时使用
    from,to:协议地址
    addrlen:协议地址长度

类似于标准的read,write。

recvfrom最后两个参数类似于accept,返回时套接口地址结构内容告诉我们是谁发送了数据报(UDP情况下)或是谁发起了连接(TCP情况下)。

sendto最后两个参数和connect类似,我们用数据报将发往(UDP情况下)或与之建立连接(TCP情况下)的协议地址。

二、数据报的丢失

如果客户数据报到达服务器,但服务器应答丢失了。客户永远阻塞于recvfrom调用。

唯一的解决方法时给客户recvfrom调用设置一个超时。

仅仅为了调用recvfrom而设置超时并不是一个完整的办法。例如,如果我们超时了,我们无法辨别超时原因是数据报没有到达服务器,还是服务器应答没有回到客户。

三、验证接收到的响应

知道客户临时端口号的任何进程都可往客户发送数据报,且这些数据报会与正常的服务器应答混淆。

对recvfrom调用以返回发送响应者的IP地址和端口号,并忽略不是来自我们的数据报所发往服务器的任何数据报。

首先我们注意到,在客户主机可以往服务器主机发UDP数据报之前,要求有ARP请求和应答。

端口不可能ICMP消息,不会返回客户。并永远阻塞在recvfrom调用。

ICMP是异步错误,直到很晚才返回。

四、UDP缺乏流量控制

UDP没有流量控制,它是不可靠的。UDP发送方比DUP接收方运行速度快时造成数据报丢失的一个重要原因。

由服务器接收的数据报的数目时不确定的,他依赖于需要因素,如网络负载、客户主机的处理负载遗迹服务器主机的处理负载。

UDP套接口接收缓冲区

在BSD/OD 2.1中,套接口接收缓冲区的最大大小缺省为262144字节(256*1024),但由于缓冲区分配机制的影响,真实的限制是246723字节。

UDP中外出接口的确定

已连接UDP套接口还可用来确定用于特定目标的外出接口,connect被应用到UDP套接口的副作用。

UNP学习第八章udp的更多相关文章

  1. UNP学习笔记(第十五章 UNIX域协议)

    UNIX域协议是在单个主机上执行客户/服务器通信的一种方法 使用UNIX域套接字有以下3个理由: 1.UNIX域套接字往往比通信两端位于同一个主机的TCP套接字快出一倍 2.UNIX域套接字可用于在同 ...

  2. UNP学习笔记(第八章 基本UDP套接字编程)

    UDP应用程序客户不与服务器建立连接,而是只管使用sendto函数给服务器发送数据报,其中必须指定目的地的地址作为参数. 下图给出典型的UDP客户/服务器程序的函数调用. recvfrom和sendt ...

  3. UNP学习笔记3——基本UDP套接字编程

    1 概述 TCP和UDP网络编程存在一些本质的差异,主要是由于传输层的差别:UDP是无连接的不可靠的数据报协议,而TCP是面向连接的字节流协议. 下图是典型的UDP客户端和服务器之间的通信流程.客户不 ...

  4. UNP学习笔记(第十八章 路由套接字)

    路由套接字上支持3种类型的操作 1). 进程能通过写路由套接字向内核发消息. 2). 进程能通过路由套接字从内核读消息. 3). 进程可以用sysctl函数得到路由表或列出所有已配置的接口. 数据链路 ...

  5. UNP学习笔记(第二十五章 信号驱动式I/O)

    信号驱动式I/O是指进程预先告知内核,使得当某个描述符发生某事时,内核使用信号通知相关进程. 套接字的信号驱动式I/O 针对一个套接字使用信号驱动式I/O(SIGIO)要求进程执行以下3个步骤: 1. ...

  6. UNP学习笔记(第十四章 高级I/O函数)

    本章讨论我们笼统地归为“高级I/O”的各个函数和技术 套接字超时 有3种方法在涉及套接字的I/O操作上设置超时 1.调用alarm,它在指定超时时期满时产生SIGALRM信号 2.在select中阻塞 ...

  7. UNP学习笔记(第十三章 守护进程和inetd超级服务器)

    关于守护进程可以查看apue的笔记 http://www.cnblogs.com/runnyu/p/4645046.html daemon_init函数 下面给出名为daemon_init函数,通过调 ...

  8. UNP学习笔记(第十一章 名字与地址转换)

    域名系统 域名系统(Domain Name System,DNS)主要用于主机名字与IP地址之间的映射. 主机名既可以是一个简单得名字,如solaris,也可以是一个全限定域名,如solaris.un ...

  9. UNP学习笔记(第六章 I/O复用)

    I/O模型 首先我们将查看UNIX下可用的5种I/O模型的基本区别: 1.阻塞式I/O 2.非阻塞式I/O 3.I/O复用(select和poll) 4.信号驱动式I/O(SIGIO) 5.异步I/O ...

随机推荐

  1. Ext js-02 -官方API文档使用

    官方API文档地址: http://docs.sencha.com/extjs/6.5.3/classic/Ext.html 打开网页如下: 1.选择所使用的Ext js版本,后面offline do ...

  2. JS中数据结构之列表

    列表是一组有序的数据.每个列表中的数据项称为元素.在 JavaScript 中,列表中的元素可以是任意数据类型.列表中可以保存多少元素并没有事先限定并可以不断壮大,实际使用时元素的数量受到程序内存的限 ...

  3. webpack对icon-font图片的处理

    一.对图片的处理 安装url-loader 然后再loaderli配置这样会把图片打包成base64格式 { test: /\.(gif|png|jpg)\??.*$/, loader: 'url-l ...

  4. [CSP-S模拟测试]:小奇挖矿2(DP+赛瓦维斯特定理)

    题目背景 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿石交易市场,以便为飞船升级无限非概率引擎. 题目描述 现在有$m+1$个星球,从左到右标号为$0$到$n$,小奇最初 ...

  5. ElasticSearch 简介概念及核心

    1.ES是什么 ES是面向文档的Nosql,这意味着它可以存储整个对象或文档.然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索.在es中,你可以对文档(而非成行成列的数据)进行索 ...

  6. php7.0 新增运算符??

    ??是php7 新增符号 其作用近似于三目运算符 ?: 但存在着细微差别 比较示例代码如图:         $b = $a?$a:2; 三目运算 <=>     $e = $a??'ho ...

  7. printf ("%*.*s")

    小数点.后“*”表示输出位数,具体的数据来自参数表printf格式字符串中,与宽度控制和精度控制有关的常量都可以换成变量,方法就是使用一个“*”代替那个常量,然后在后面提供变量给“*”. 同样,小数点 ...

  8. 102.kaldi 斯坦福语音识别工具的编译

    接着上一节,在编译完了openFST有限状态机之后,便开始了最重要部分,语音识别插件的编译过程 首先看目录是如下所示的 1.首先添加openBLAS的支持,这是一个矩阵运算库,个人觉得这个矩阵运算库 ...

  9. 【GDAL】GDAL栅格数据结构学习笔记(一): 关于Metadata

    在维护一段代码时看到前任程序员写的获取栅格数据的CellSize的功能,竟然在知道GDAL的情况下去调用AE的接口来解算,觉得费解. 原来的思路是使用AE的Raster对象读取出Raster的文件大小 ...

  10. 用webdriver模仿浏览器 爬取豆瓣python书单

    用webdriver模仿浏览器 爬取豆瓣python书单 其中运用到os 模块 作用是生成文件夹 存储爬取的信息 etree 用于xpath解析内容 详细代码如下 可用我的上一篇博客存取到excel当 ...