我正在为UDP客户端创建UDP套接字并发送具有不同端口号的UDP数据包,并等待来自目标的回复一段时间。
我的疑问是..是否可以将UDP套接字重新绑定到多个端口号(甚至IP地址)到同一个套接字FD而不关闭套接字? (我不能使用RAW套接字:()
EDIT1:我试图用相同的IP地址和Portnumber绑定两个不同的套接字文件描述符,但我的结果是混合的。(对于这两个套接字文件描述符,我设置了SO_REUSEADDR选项)。 / p>
在Linux内核2.6.8中
第一个插槽FD - 成功绑定。
Second Socket FD:返回错误98,表示地址已在使用中。
在Linux内核2.6.24中
First Socket FD:成功绑定
第二套接字FD:成功绑定
答案 0 :(得分:1)
我的疑问是..是否有可能在不关闭套接字的情况下将UDP套接字重新绑定到同一套接字FD的多个端口号(甚至是IP地址)?
看起来POSIX has that now officially as unsupported,引用: bind()函数应将本地套接字地址地址分配给描述符套接字标识的套接字没有分配本地套接字地址 的
过去我听说在某些平台上可以重新绑定(),但我个人从未使用过。
除此之外还有其他最佳解决方案吗?
保留开放UDP套接字的缓存,使用带有poll()的套接字进行IO多路复用和超时处理。
答案 1 :(得分:0)
尝试在一组打开的套接字上使用select()
。
答案 2 :(得分:0)
要实现此目的,您可以使用一个UDP套接字绑定到一个端口来接收数据,而另一个端口(绑定到不同的端口)来进行发送。