Unix网络编程读书笔记(五)

原创 2016年09月01日 21:54:36

使用UDP编写的一些常见的应用程序有:DNS(域名系统)、NFS(网络文件系统)和SNMP(简单网络关系协议)。

UDP协议的通信函数分别是sendto与recvfrom函数,函数原型如下:

#include <sys/socket.h>
extern ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n,
			 int __flags, __SOCKADDR_ARG __addr,
			 socklen_t *__restrict __addr_len);
extern ssize_t sendto (int __fd, const void *__buf, size_t __n,
               int __flags, __CONST_SOCKADDR_ARG __addr,
               socklen_t __addr_len);

写一个长度为0的数据报是可行的,这一数据报的长度就是IP首部(IPv4下是20,IPv6下是40)加上UDP首部(8字节)。

从TCP套接字上read返回0值表示对端已关闭连接,但UDP套接字上recvfrom返回0值是可以接受。

UDP输出操作成功返回仅仅表示在接口输出队列中具有存放所形成IP数据报的空间。

服务器可从到达的IP数据报中获取的信息。

来自客户的IP数据报 TCP服务器 UDP服务器
源IP地址 accept recvfrom
源端口 accept recvfrom
目的IP地址 getsockname recvmsg
目的端口 getsockname getsockname

与未连接的UDP套接字相比,已连接的套接字(调用了connect函数的套接字)有以下三点变化:

  1. 无法再为输出操作指定目的IP地址和端口号。
  2. 不必使用recvfrom以获悉数据报的发送者,而改用read、recv或recvmsg函数。
  3. 由已连接UDP套接字引发的异步错误会返回给它们所在的进程,而未连接套接字不接收任何异步错误。

对上述内容总结如下表:

套接字类型 write或send 不指定目的地址的sento 指定目的地址的sento
TCP套接字 可以 可以 EISCONN
UDP套接字,已连接 可以 可以 EISCONN
UDP套接字,未连接 EDESTADDREQ EDESTADDREQ 可以

对一个已连接的UDP套接字多次调用connect可以实现以下目标:

  1. 指定新的IP地址和端口号。
  2. 断开套接字。

TCP套接字只能调用一次connect函数。

已连接UDP套接字还可用于确定用于某个特定目的地的外出接口。这是由connect函数应用到UDP套接字时的一个副作用造成的:内核选择本地IP地址。这个本地IP地址通过为目的IP地址搜索路由表得到外出接口,然后选择该接口的主IP地址而选定。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

unix网络编程---读书笔记(一)---tcp/udp/sctp简介

本博客为系列博客,主要记录 《UNIX网络编程 卷一》相关读书笔记; 此篇博客主要针对 第一部分 :简介和 TCP/IP 进行网络编程,首先要确认网络通信协议(protocol);Unix网络编...
  • lx1607
  • lx1607
  • 2016年05月01日 15:51
  • 3750

UNIX网络编程卷2进程间通信读书笔记-管道

一.管道        管道的名称很形象,它就像是一个水管,我们从一端到水然后水从令一端流出。不同的是这里说的管道的两边都是进程。从一端往管道里写数据,其它进程可以从管道的另一端的把数据读出,从而实...

《UNIX网络编程——Socket Networking API》(3rd,Vol1)读书笔记(1)【第一章】

《Uni网络编程—Socket Networking API》 读书笔记 UNIX® Network Programming Volume 1, Third Edition: The Sockets ...

UNIX 网络编程 卷一:套接字联网API(第3版) 读书笔记(5) 第五章 TCP客户/服务器程序示例

一、POSIX信号处理二、处理SIGCHLD信号三、wait和waitpid函数四、SIGPIPE信号  
  • sky1737
  • sky1737
  • 2011年03月28日 22:16
  • 518

UNIX 网络编程 卷一:套接字联网API(第3版) 读书笔记(1) 第一章 简介

一、OSI模型和网际协议簇中的各层二、网络拓扑的发现1、netstat -i 提供网络接口的信息。我们还提供指定-n标志以输出数值地址其中环回(loopback)接口称为lo,以太网接口称为eth02...
  • sky1737
  • sky1737
  • 2011年03月28日 12:03
  • 460

linux进程间/线程间通讯(《unix网络编程-进程间通讯》读书笔记)

Linux进程间通信 1.管道 管道的主要局限性正体现在它的特点上:     只支持单向数据流;     只能用于具有亲缘关系的进程之间;     没有名字;     管道的缓冲区是有限的(管道制...
  • sunny04
  • sunny04
  • 2014年01月10日 15:12
  • 1235

《UNIX网络编程卷1》读书笔记--第六章I/O复用:select和poll函数

前言I/O复用采用轮询的方式处理多个描述符,当有文件准备好时,就通知进程。 关注点 I/O复用的应用场合 采用I/O复用的客户端和服务器程序 I/O复用的应用场合1. 当客户处理多个描述符时(通常是交...

Unix网络编程上卷读书笔记--源代码的使用和第一章

毋庸置疑,W.RICHARD STEVENS是个计算机领域极少数的天才!他的书,每一本都是经典。  读计算机的书,最好的方法是一个人呆在安静的房间,抱着电脑,一遍看书,一遍敲源代码,推敲源代码。 ...

《UNIX网络编程卷1》读书笔记--第五章TCP客户/服务实例

前言 本章开始编写一个完整的TCP客户/服务器程序实例。 (1) 客户冲标准输入读入一行文本,并写给服务器 (2)服务器从网络输入读入这行文本,并回射给客户 (3)客户从网络读入这行回射...

UNIX 网络编程 卷一:套接字联网API(第3版) 读书笔记(6) 第六章 I/O复用:select和poll函数

一、I/O复用典型使用在下列网络应用场合二、I/O模型1、阻塞式I/O模型2、非阻塞式I/O模型3、I/O复用模型4、信号驱动式I/O模型5、异步I/O模型三、select函数1、描述符就绪条件四、s...
  • sky1737
  • sky1737
  • 2011年03月28日 23:40
  • 472
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unix网络编程读书笔记(五)
举报原因:
原因补充:

(最多只允许输入30个字)