Chinaunix首页 | 论坛 | 博客
  • 博客访问: 307434
  • 博文数量: 214
  • 博客积分: 4258
  • 博客等级: 上校
  • 技术积分: 2021
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-02 09:16
个人简介

http://blog.csdn.net/ly21st http://ly21st.blog.chinaunix.net

文章分类

全部博文(214)

文章存档

2018年(16)

2015年(1)

2014年(2)

2012年(22)

2011年(173)

分类: LINUX

2011-09-20 21:33:17

8.1 概述

写一个长度为0的数据是可行的,这导致一个包含ip头部、8字节udp头部和没有数据的ip数据报。这也意味着对于数据报协议,recvfrom返回0也是可行的:它不代表对方已关闭了连接,这与tcp套接口上的read返回0的情形不同。由于udp是无连接的,这就没有诸如关闭udp连接之类的事情。

8.8 验证接收到的响应

       在多宿服务器上,recvfrom返回的ip地址有可能不是我们所发送数据报的目的ip地址,此时的解决办法有:

1)给定由recvfrom返回的ip地址后,由客户在DNS中查找服务器主机的名字来验证相应主机的域名而不是它的ip地址;

2)udp服务器给服务器主机上配置的每个ip地址创建一个套接口,绑定相应的ip地址到此套接口,然后在所有这些套接口上使用select(等待其中人一个成为可读),再从可读的套接口作应答。由于用于应答的套接口绑定了客户请求的ip地址(否则该数据报不会投送到此套接口上),这就保证应答的源地址与请求的目的地址相同。

 

8.10 UDP程序例子小结        对于UDP套接口,目的IP地址只能为IPv4设置IP_RECVDSTADDR套接口选项或为IPv6设置IPV6_PKTINFO套接口选项,然后调用recvmsg而不是recvfrom来得到。由于udp是无连接的,因此目的ip地址可随发送到服务器哦的每个数据报而改变。

8.11 UDPconnect函数

       对于已连接的udp套接口,进程可给那个套接口再次调用connect以达到下面两个目的之一:

1)指定新的ip地址和端口号;

2)断开套接口

       在未连接udp套接口上给两个数据报调用函数sendto导致内核执行下列六步:

1)连接套接口;

2)输出第一个数据;

3)断开套接口;

4)连接套接口;

5)输出第二个数据报;

6)断开套接口连接。

       当采用连接套接口时,效率更高,其步骤为:

1)连接套接口;

2)输出第一个数据报;

3)输出第二个数据报。

在这种情况下,内核拷贝一次含有目的ip地址和端口的套接口地址结构,而当调用两次sendto时,要拷贝两次。临时连接未连接的udp套接口将花去每个udp传输三分之一的消耗。

 

阅读(326) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~