linux网络编程之udp的connect趣谈

UDP协议通常不需要connect,但调用connect后,已连接的UDP套接字会自动发送到指定IP和端口,只接收来自connect指定地址的数据报,且能使用TCP的read/write接口。多次调用connect可以改变连接目标,设置AF_UNSPEC可断开连接。这种做法能提高性能,减少连接操作。
摘要由CSDN通过智能技术生成

         对于linux网络编程,UDP协议不是面向连接的协议,直接把数据报发送到链路层,至于能不能到达目的IP和端口,它不关注;大部分时候再编写代码时候只需要在sendto函数中指定你要发送的端口和IP地址就可以了,不用绑定IP和端口。不过你是否考虑过,UDP到底是否可以进行connect,如果对UDP进行connect函数的调用,会发生什么现象呢?

        在进行socket网络编程代码编写时,我个人觉得有如下三个步骤在客户端和服务端是一致的,只是触发的时机不同。

  • socket创建通信套接口句柄(fd)---------------创建插座(抽象比喻)
  • bind绑定本地的IP和端口到句柄--------------在插座的后面连接上电源线
  • connect连接远端的IP和端口号到句柄,建立数据交换线路------------在插座的前面连接上使用者

以上三个步骤在TCP协议通信中client是必须存在,但是UDP协议中,可能针对connect看到的不多。

依据上面的说明,UDP可以分为如下两种:

  1. 未连接的UDP,新创建的UDP套接字。
  2. 已连接的UDP,调用connect就会这样。


比较1/2两种UDP,已经连接的UDP有如下特性:

  • 不需要给输出操作指定目的IP和目的端口,写到UDP的缓冲区里的数据,将自动发送到你调用connect指定的IP和端口。
  • 在一个已连接的UDP套接字上,内核由输入操作返回的数据报只有那些来自connect所指定的协议地址的数据报。目的地为这个已连接的UDP套接字的本地协议地址(IP和端口),远端地址不是该套接字早先connect到的协议地址的数据报,不会投递到该套接字。这样就限制了已连接的UDP套接字能且只能与一个对端交换数据报。
  • 由已连接的套接字引发的异步错误发回给他们所在的进程,而未连接的UDP套接字不接受任何异步错误。
  • 读写的操作接口方法增多了,除了可以使用sendto和recvfrom的接口外,还可以使用tcp的那套操作接口--read/readv/readmsg和write/writev等

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值