是否可以像connect
一样设置UDP套接字的默认目的地,但又不失去从其他来源接收数据报的能力?
我正在谈论本机OS套接字API(BSD-socket / winsock2),并且我对Linux和Windows平台的答案感兴趣。
[ EDIT :]
如果不清楚,这是connect docs中有问题的部分:
如果套接字sockfd的类型为SOCK_DGRAM,则addr是默认情况下向其发送数据报的地址,并且是唯一从其接收数据报的地址。
是否可以像connect
一样设置UDP套接字的默认目的地,但又不失去从其他来源接收数据报的能力?
我正在谈论本机OS套接字API(BSD-socket / winsock2),并且我对Linux和Windows平台的答案感兴趣。
[ EDIT :]
如果不清楚,这是connect docs中有问题的部分:
如果套接字sockfd的类型为SOCK_DGRAM,则addr是默认情况下向其发送数据报的地址,并且是唯一从其接收数据报的地址。
是否可以仅设置UDP套接字的默认目标 像connect一样,但又不会失去从其他来源接收软件包的能力?
据我所知,这不是-UDP套接字上的connect()
既设置了默认发送目的地,又安装了过滤器,以便从所有接收的UDP数据包除了指定的地址/端口以外的其他目的地也将被丢弃。
我对这个问题的解决方案是只调用sendto()
和recvfrom()
(如果您的代码库中有UDPSocket
类或类似的类,则可以将默认发送地址缓存为该类中的私有成员变量,以便您的代码库的其余部分可以仅调用Send()
方法,并将其留给该方法以处理sendto()
参数)