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地址而选定。


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

tcp/ip协议栈--socket API 之socket()

0x01 缘由      前面学习了基本tcp/ip协议栈相关处理流程,学习这些主要目的是为加强对网络相关处理的熟练程度,指导将来相关网络设备开发、网络安全产品开发。除此之外,应该进一步关注高性能服...
  • pangyemeng
  • pangyemeng
  • 2017年09月27日 14:18
  • 202

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

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

《UNIX网络编程 卷2》读书笔记(二)

      如何知道进程在一个空消息队列中放入一个消息?如果阻塞在msgrcv调用中,则除了等待无法做其他事情,如果给msgrcv指定非阻塞标志(IPC_NOWAIT),尽管不阻塞了,但必须持续调...
  • phinecos
  • phinecos
  • 2008年05月27日 16:50
  • 460

学习《UNIX网络编程卷一》笔记

学习《UNIX网络编程卷一》笔记
  • zhang_yin_liang
  • zhang_yin_liang
  • 2017年04月11日 16:11
  • 504

UNIX网络编程卷2进程间通信读书笔记—概述

一.什么是进程间通信        IPC是进程间通信的简称,所谓进程通信,就是不同进程之间进行一些"接触",这种接触有简单,也有复杂。机制不同,复杂度也不一样。通信是一个广义上的意义,不仅仅指传递...
  • zxasqwedc
  • zxasqwedc
  • 2014年09月24日 10:47
  • 774

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

1.记录锁的功能        当一个进程正在读或修改文件的某个部分时,它可以阻止其他进程修改同一文件区。我们不应该从字面上去理解记录锁,实际上它应该叫“区域锁”,因为它锁定的只是文件的一个(也可能...
  • zxasqwedc
  • zxasqwedc
  • 2014年09月24日 12:57
  • 569

Unix网络编程学习日记

今天开始拜读《Unix网络编程》。找到的源代码在Linux下有各种问题,最后决定还是自己从头写比较好。 从第一个时间服务程序开始学习。今天先看一下主要的头文件的作用。 在common.h中(参照 ...
  • pdcxs007
  • pdcxs007
  • 2015年02月11日 17:34
  • 2420

unix网络编程(一)第一个例子

刚刚接触本书,遇到第一个例子就有写困难,查阅了很多资料,现总结如下。 1)下载相关代码 unpv13e.tar.gz 2)进行相关编译                解压缩: tar-...
  • Grace_Lee2011
  • Grace_Lee2011
  • 2016年12月27日 09:36
  • 378

unix网络编程 学习笔记(精华)

1.1 客户端程序和服务端程序  网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端.  网络程序是先有服务器程序启动,等待客户端的程序运行并建立连接.一般的...
  • XuLujunCSDN
  • XuLujunCSDN
  • 2017年05月26日 15:33
  • 473

Unix网络编程 chapter习题代码

修改原来的sever,每次只发一个字符: #include"WinSock2.h" #include "time.h" #include "stdio.h" #include #pragma ...
  • boyhailong
  • boyhailong
  • 2012年10月03日 10:58
  • 1497
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unix网络编程读书笔记(五)
举报原因:
原因补充:

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