Python TCP Relay/Proxy 服务器锁定

Python TCP Relay/Proxy Server locking up

我设置了一个非常简单的 Python 代理服务器。它的目的是获取一个 TCP 流(视频)并将该 TCP 流转发给多个客户端(目前只是测试一个开始)。一切正常,直到我尝试转发 (o.send(data)) 数据,然后它会 receive/send 几个数据包,冻结,然后大约一分钟或两个之后 receive/send 再多几个数据包并再次冻结。

如果我只是获取传入数据并将其加载到一个变量中,它根本不会减慢速度。而且,如果我既将传入数据加载到数据变量中,又将随机数据块而不是接收到的数据发送到客户端,它也不会冻结。我觉得可能存在竞争条件或类似情况,但 .recv() 不应该阻塞,所以我不知道死锁从何而来。一旦数据被 recv 填满,就应该可以发送了吧?然后 rinse/repeat 无限期地。我可以使用 top -bn1 检查 CPU 利用率,而 python 脚本似乎根本没有使用任何 cpu。

死锁发生在.recv() 和.send() 之间。

如果我输入调试打印,它将打印 "Data received!" ..... 暂停 ... "Data Sent!" "Data Received!"...

import socket
# Listen for gstreamer TCP stream. 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("192.168.1.1", 911))
s.listen(5)

# Connect to the video player
o = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
o.connect(("192.168.2.2",910))

clientsocket, address = s.accept()

while 1:
# Receive the video data. 
     data = clientsocket.recv(4096)
# Forward it to the video player
     o.send(data)
     print 'o'

谢谢!

其中一个 NIC 出现故障。我换了 NIC,它工作正常。不确定为什么它会以这种方式出现,但至少我找到了解决方案。