0

我正在为 UDP 客户端创建 UDP 套接字并发送具有不同端口号的 UDP 数据包,并等待来自目的地的回复一段时间。

我的疑问是.. 是否可以在不关闭套接字的情况下将 UDP 套接字重新绑定到多个端口号(甚至 IP 地址)到同一个套接字 FD?(我不能使用 RAW 套接字 :()

EDIT1:我尝试将两个不同的套接字文件描述符绑定到相同的 IP 地址和端口号,但结果好坏参半。(对于两个套接字文件描述符,我都设置了 SO_REUSEADDR 选项)。

在 Linux 内核 2.6.8

First Socket FD - 绑定成功。

第二个套接字 FD:返回错误 98,说明地址已在使用中。

在 Linux 内核 2.6.24 中

First Socket FD:绑定成功

第二个Socket FD:绑定成功

4

3 回答 3

1

我的疑问是.. 是否可以在不关闭套接字的情况下将 UDP 套接字重新绑定到多个端口号(甚至 IP 地址)到同一个套接字 FD?

似乎POSIX 现在正式不支持,引用:bind() 函数应将本地套接字地址地址分配给由描述符套接字标识的套接字,该套接字没有分配本地套接字地址

过去我听说在某些平台上可以进行重新绑定(),尽管我个人从未使用过。

除了这个还有没有最好的解决方案???

保留打开的 UDP 套接字的缓存,使用带有 poll() 的套接字进行 IO 多路复用和超时处理。

于 2010-07-15T09:33:16.763 回答
0

为此,您可以使用一个 UDP 套接字绑定到一个端口来接收数据,而另一个(绑定到不同的端口)进行发送。

于 2010-07-15T09:51:28.150 回答
0

尝试select()在一组打开的套接字上使用。

于 2010-07-15T04:03:13.803 回答