Linux/Unix网络编程之UDP的connect函数

对于linux网络编程,我们都知道UDP是发送数据报,不是面向连接的协议,也就是它只是把数据报发送到链路层,至于能不能到达目的IP和端口,他都无能为力了。而且,我们只要在sendto函数中指定你要发送的端口和IP地址就可以了,我们不用绑定端口和IP。

但是,如果对UDP进行connect函数的调用,会发生什么现象呢?

那么,connect函数是连接外部的IP和端口,一般我们是连接服务器的公共的端口和IP,但是,客户端也可以的!

 

有了这个能力,我们可以分为两个种:

1,未连接的UDP,新创建的UDP套接字就是这样的。

2,已连接的UDP,调用connect函数就是这样的。

 

其中,已连接的毕未连接的多了三个变化:

1,我们再也不能给输出操作指定目的IP和目的端口。也就是说,我们不能调用sendto,而是用write或者send。写到UDP的缓冲区里的数据,将自动发送到你调用connect指定的IP和端口。

2,我们不在是用recvfrom获得数据报的发送者,而改成了read,recv或者recvmsg。在一个已连接的套接字上,内核由输入操作返回的数据报只有那些来自connect所指定的协议地址的数据报。目的地为这个已连接的UDP套接字的本地协议地址(IP和端口),发源地却不是该套接字早先connect到得协议地址的数据报,不会投递到该套接字。这样就限制了已连接的UDP套接字能且只能与一个对端交换数据报。

3,由已连接的套接字引发的异步错误发回给他们所在的进程,而未连接的UDP

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值