2015-06-09 21 views
0

这个想法是多播同一个内容从一个资源到多个接收者一次。我想出了下面的代码:psuedo TCP组播与os.dup2()在python?

#!/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

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

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

+0

找到另一个有用的链接http://stackoverflow.com/q/17590816/41948 – est