在python中使用os.dup2()伪造TCP多播?

时间:2015-06-09 09:05:38

标签: python sockets tcp multicast dup2

这个想法是一次将多播从一个资源到多个接收者的相同内容。我想出了以下代码:

#!/usr/bin/env python
# coding: utf8

import socket, os

c = socket.socket()
c.connect(('127.1', 4343))

s = socket.socket()
s.bind(('127.1', 8989))
s.listen(3)
while 1:
  conn, addr = s.accept()
  print 'Connected by %s:%s' % addr
  os.dup2(conn.fileno(), c.fileno(), )
s.close()

我使用netcat对其进行了测试但没有任何成功,client意外退出或server退出任何连接后退出。这有可能吗?我做错了什么?

1 个答案:

答案 0 :(得分:1)

os.dup2()调用后,两个文件描述符(FD)都引用相同的套接字,从而共享其缓冲区。使用原始FD提取数据(通过recv()read())时,无法再使用重复的FD提取此片段,反之亦然。输入数据的每个八位字节将被准确读取一次并由单个接收器读取,因此不会为每个FD复制(我认为这是您错误的地方)。

有关可靠的多播解决方案,请参阅this answer和链接主题。