0

我正在尝试使用socat. 我知道这个过程会丢失帧边界,但在这种情况下这不是问题。我设法使用以下命令使其部分工作:

socat TCP-LISTEN:20000,fork UDP4-LISTEN:10000,reuseaddr

即,socat等待客户端连接到 TCP 套接字,然后派生一个新的子进程来侦听 UDP 套接字。多个客户端应该能够使用 TCP 进行连接,并且每个客户端都应该收到每个接收到的 UDP 消息。只要只有一个端点向 UDP 套接字发送数据,这种方法就可以工作。但是,如果第二个端点正在向 UDP 套接字发送数据,则该数据将不会通过已建立的 TCP 连接转发。

似乎一旦接收到第一个数据包或过滤从其他主机发送的数据,就会在分叉子进程中socat调用UDP 套接字。connect()

有什么方法可以指示socat不过滤 UDP 流量并将数据包从发送到侦听 UDP 套接字的任何端点转发?

4

1 回答 1

0

我认为这不能用 socat 完成,即使在我的 2.0.0-b4 版本中,我也看不到“重用”选项。

假设命令:

socat TCP-LISTEN:20000,fork,reuseaddr UDP-RECVFROM:10000,reuseaddr

据我在我的系统中看到的,这不会将 UDP 消息发送到所有TCP 连接的客户端。它一次只会将消息从一个 UDP 客户端发送到一个 TCP 客户端,一旦下一个 UDP 客户端连接,它只会向下一个 TCP 客户端发送数据。

于 2015-03-11T10:27:25.353 回答