Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 客户端UDP套接字绑定_Linux_Sockets_Udp_Udpclient - Fatal编程技术网

Linux 客户端UDP套接字绑定

Linux 客户端UDP套接字绑定,linux,sockets,udp,udpclient,Linux,Sockets,Udp,Udpclient,我正在为UDP客户端创建UDP套接字,并发送具有不同端口号的UDP数据包,并等待来自目标的应答一定时间 我的怀疑是。。是否可以在不关闭套接字的情况下将UDP套接字重新绑定到同一套接字FD的多个端口号(甚至IP地址)??(我不能使用原始套接字:() EDIT1:我尝试用相同的IP地址和端口号绑定两个不同的套接字文件描述符,但结果不一(对于这两个套接字文件描述符,我正在设置SO\u REUSEADDR选项) 在Linux内核2.6.8中 第一个套接字FD-绑定成功 第二个套接字FD:返回错误98,表

我正在为UDP客户端创建UDP套接字,并发送具有不同端口号的UDP数据包,并等待来自目标的应答一定时间

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

EDIT1:我尝试用相同的IP地址和端口号绑定两个不同的套接字文件描述符,但结果不一(对于这两个套接字文件描述符,我正在设置SO\u REUSEADDR选项)

在Linux内核2.6.8中

第一个套接字FD-绑定成功

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

在Linux内核2.6.24中

第一个套接字FD:绑定成功

第二个套接字FD:成功绑定

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

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

看起来,quote:bind()函数应该为描述符套接字标识的套接字分配一个本地套接字地址,该描述符套接字没有分配本地套接字地址

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

除了这个,还有什么更好的解决方案吗


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

要实现这一点,您可以使用一个UDP套接字bonud到一个端口接收数据,使用另一个(绑定到不同的端口)进行发送。

Hmm select()只能在打开的多个套接字上使用,但不能在单个套接字FD:(@codingfreak:每个侦听套接字都需要自己的FD。在侦听的每个端口/地址对上打开一个套接字。然后在循环中选择以查找下一个要读取的套接字。@codingfreak:使用
select()完全可以)
仅在一个套接字上使用fd。对于我来说,这不是一个好的解决方案。因为我必须在同一个套接字上发送和接收数据…看来select()真的能帮我解决问题。