def __init__(self, ip=None, port=None, seeders=None, trackerAddr=None, ttl=1): if not (ip or port or seeders or trackerAddr) : print "Group required IP and port and seeders list" exit() self.trackerAddr = trackerAddr self.seeders = seeders # create a UDP socket print "Creating UDP group socket..." s1 = Socket(ip,port).UDP() # Set Time-to-live (optional) ttl_str = struct.pack('@i', ttl) # include ttl into IP header s1.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, ttl_str) # for udp # assign variable to group self self.gSocket = s1 self.ip = ip self.port= port self.ttl = ttl self.gSocket.bind((ip, port)) ## for tcp port2 = 8982 print "Creating TCP socket for seeder connection..." s2 = Socket(ip,port2).TCP() self.sSocket = s2 self.port2 = port2 self.sSocket.bind((ip, port2)) print "Connecting to seeder ", seeders self.sSocket.connect(seeders) self.receivefromseeder()
def JoinGroup(self, groupIP, groupPort): ''' Create a UDP socket Join the group ''' s = Socket(self.ip, self.port).UDP() # Allow multiple copies of this program on one machine s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # Bind it to the port s.bind((groupIP, groupPort)) # get the group to join group_bin = socket.inet_pton(socket.AF_INET, groupIP) # Join group mreq = group_bin + struct.pack('=I', socket.INADDR_ANY) s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) return s