我正在尝试使用socat
通过TCP转发UDP流量。我知道这个过程会丢失帧边界,但在这种情况下这不是问题。我设法使用此命令使其部分工作:
socat TCP-LISTEN:20000,fork UDP4-LISTEN:10000,reuseaddr
即,socat
等待客户端连接到TCP套接字,然后分叉侦听UDP套接字的新子进程。多个客户端应该能够使用TCP进行连接,并且每个客户端都应该获得每个收到的UDP消息。只要只有一个端点将数据发送到UDP套接字,这就可以工作。但是,如果第二个端点正在向UDP套接字发送数据,则不会通过已建立的TCP连接转发该数据。
一旦收到第一个数据包或以其他方式过滤从其他主机发送的数据,似乎socat
在分叉子进程中的UDP套接字上调用connect()
。
有没有办法指示socat
不过滤UDP流量并从发送到侦听UDP套接字的任何端点转发数据包?
答案 0 :(得分:0)
我不认为这可以通过socat完成,而且我也没有看到"重复使用"选项甚至在我的2.0.0-b4版本中。
假设命令:
socat TCP-LISTEN:20000,fork,reuseaddr UDP-RECVFROM:10000,reuseaddr
据我所知,在我的系统中,不将UDP消息发送到所有 TCP连接的客户端。它只会将消息从一个UDP客户端一次发送到一个TCP客户端,一旦下一个UDP客户端连接它就会将数据发送到下一个TCP客户端。