客户端UDP套接字绑定

客户端UDP套接字绑定

问题描述:

我创建UDP套接字的UDP客户端,并用不同的端口号发送UDP数据包,并等待来自目的地一定的时间答复。客户端UDP套接字绑定

我的疑问是..是否有可能重新绑定一个UDP套接字多个端口号(甚至IP地址)相同的插座FD没有关闭套接字? (我不能使用原始套接字:()

EDIT1:我试图绑定同一个IP地址和端口号两个不同的插座文件描述符,但我会有不同的结果。(对于这两个插座文件描述符我设置。SO_REUSEADDR选项)

在Linux内核2.6.8

第一插口FD - 成功绑定

第二插座FD:返回错误98在使用中说地址已经

在Linux内核2.6.24

第一插口FD:成功

第二插座FD结合:成功

结合尝试在一组开放套接字的使用select()

+0

Hmm select()只能在打开的多个插座上使用,但不能在单个SOCKET FD上使用:( – codingfreak 2010-07-15 05:25:37

+0

@codingfreak:每个侦听套接字都需要自己的FD。在每个端口/地址对上打开一个套接字然后'select'在循环中找到下一个读 – Borealid 2010-07-15 08:24:54

+1

@codingfreak:这是完全可以使用'选择()'上只有一个插座FD – che 2010-07-15 09:50:19

我怀疑是否有可能重新绑定一个UDP套接字到多个端口号(甚至IP地址)到同一个套接字FD没有关闭套接字?

看来,POSIX has that now officially as unsupported,报价:的bind()函数应当向由已分配没有本地套接字地址描述插座确定了插座分配一个本地套接字地址地址。

在过去,我已经听说,重新绑定()ING是可能在某些平台上,但我个人从来没有使用过这一点。

难道还有比这以外的任何最好的解决办法???

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

要做到这一点,你可以使用一个UDP套接字bonud一个端口接收的数据和其他(绑定到不同的端口)做的发送。

+0

这不是我的情况很好的解决方案..因为我有。在同一个套接字上发送和接收数据......似乎select()真的会帮助我。 – codingfreak 2010-07-21 03:23:01