博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UDP中使用bind和connect的作用
阅读量:7202 次
发布时间:2019-06-29

本文共 1253 字,大约阅读时间需要 4 分钟。

1:UDP中可以使用connect系统调用

2:UDP中connect操作与TCP中connect操作有着本质区别。
TCP中调用connect会引起三次握手,client与server建立连结.UDP中调用connect内核仅仅把对端ip&port记录下来.
3:UDP中可以多次调用connect,TCP只能调用一次connect.  
UDP多次调用connect有两种用途:1,指定一个新的ip&port连结. 2,断开和之前的ip&port的连结.
指定新连结,直接设置connect第二个参数即可.
断开连结,需要将connect第二个参数中的sin_family设置成 AF_UNSPEC即可. 
4:UDP中使用connect可以提高效率.原因如下:
普通的UDP发送两个报文内核做了如下:#1:建立连结#2:发送报文#3:断开连结#4:建立连结#5:发送报文#6:断开连结
采用connect方式的UDP发送两个报文内核如下处理:#1:建立连结#2:发送报文#3:发送报文另外一点,  每次发送报文内核都由可能要做路由查询.
5:采用connect的UDP发送接受报文可以调用send,write和recv,read操作.当然也可以调用sendto,recvfrom.
调用sendto的时候第五个参数必须是NULL,第六个参数是0.调用recvfrom,recv,read系统调用只能获取到先前connect的ip&port发送的报文. 
UDP中使用connect的好处:1:会提升效率.前面已经描述了.2:高并发服务中会增加系统稳定性.原因:假设client A 通过非connect的UDP与server B,C通信.B,C提供相同服务.为了负载均衡,我们让A与B,C交替通信.A 与 B通信IPa:PORTa <----> IPb:PORTb;
A 与 C通信IPa:PORTa' <---->IPc:PORTc 
假设PORTa 与 PORTa'相同了(在大并发情况下会发生这种情况),那么就有可能出现A等待B的报文,却收到了C的报文.导致收报错误.解决方法内就是采用connect的UDP通信方式.在A中创建两个udp,然后分别connect到B,C.

 

 

对一个UDP的套接口多次调用connect的情况如何?

  • 连接新的IP和端口
  • 断开前面的连接

第一个目的不同于TCP连接connect的使用:对于TCP连接,connect只能调用一次;针对UDP则可以connect到不同的server,eg:client需要和多个服务器同时通信。

第二个目的为了断开一个已连接的UDP连接,再次调用connect时,把套接字地址结构的地址簇成员(IPv4为sin_family,IPv6为sin6_family),设置为AF_UNSPEC即可。

 

性能:当进程知道自己要给同一个目的地址发送多个数据报时,显式连接套接字效率更高。

而临时连接未连接的UDP套接字大约会消耗每个UDP传输三分之一的开销。

 

转载地址:http://mbzum.baihongyu.com/

你可能感兴趣的文章
Lagom零时:CQRS概念
查看>>
mysql-5.7.17-winx64免安装配置
查看>>
ubuntu+web.py+fastcgi+nginx
查看>>
配置YUM源,然后再安装补丁包
查看>>
万兆网卡在网吧服务器中的应用
查看>>
第五人格怎么投屏 轻松玩电脑版手游
查看>>
Hibernaate Set集合的使用
查看>>
推荐几个笔记类APP,自学提示必备
查看>>
Ruby中的Profiling工具
查看>>
Yii2语言国际化配置
查看>>
4分钟带你走进人工智能的辉煌时期
查看>>
判断输入为汉字的问题
查看>>
magento 银联插件 银行卡支付
查看>>
UEFI win7系统的安装
查看>>
Bootstrap Dialog 使用
查看>>
DNS Server Installation Step by Step Using CentOS 6.5
查看>>
java.sql.SQLException: Before start of result set
查看>>
iOS开发在线参考资料
查看>>
文字,表情,数字常用切换
查看>>
ajax的简单实用
查看>>