【发布时间】:2019-11-04 13:30:06
【问题描述】:
是否可以像connect 那样设置 UDP 套接字的默认目的地,但又不会失去从其他来源接收数据报的能力?
我说的是本机 OS 套接字 API (BSD-socket / winsock2),我对 linux 和 windows 平台的答案很感兴趣。
[编辑:]
如果不清楚,这里是connect docs 中的问题部分:
如果套接字 sockfd 是 SOCK_DGRAM 类型,那么 addr 是默认发送数据报的地址,也是接收数据报的唯一地址。
【问题讨论】:
-
你不能只使用sendto和所需的目标地址而不是调用
connect吗? -
@dewaffled:当然可以,但这意味着我必须保留目标地址结构,据我所知,它的效率也较低(尽管在大多数情况下这可能并不明显)。
-
还要注意网络错误(例如,ICMP 目标不可达)将被转发到
connected UDP 套接字。这对您可能有用也可能没用,但通常服务器无法做任何事情,因为在很多情况下这些不会被发回
标签: c++ c sockets networking udp