These files are a subset of the python-2.7.2.tgz distribution from python.org. Changed files from PyMod-2.7.2 have been copied into the corresponding directories of this tree, replacing the original files in the distribution. Signed-off-by: daryl.mcdaniel@intel.com git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13197 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			81 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python
 | |
| #
 | |
| # Send/receive UDP multicast packets.
 | |
| # Requires that your OS kernel supports IP multicast.
 | |
| #
 | |
| # Usage:
 | |
| #   mcast -s (sender, IPv4)
 | |
| #   mcast -s -6 (sender, IPv6)
 | |
| #   mcast    (receivers, IPv4)
 | |
| #   mcast  -6  (receivers, IPv6)
 | |
| 
 | |
| MYPORT = 8123
 | |
| MYGROUP_4 = '225.0.0.250'
 | |
| MYGROUP_6 = 'ff15:7079:7468:6f6e:6465:6d6f:6d63:6173'
 | |
| MYTTL = 1 # Increase to reach other networks
 | |
| 
 | |
| import time
 | |
| import struct
 | |
| import socket
 | |
| import sys
 | |
| 
 | |
| def main():
 | |
|     group = MYGROUP_6 if "-6" in sys.argv[1:] else MYGROUP_4
 | |
| 
 | |
|     if "-s" in sys.argv[1:]:
 | |
|         sender(group)
 | |
|     else:
 | |
|         receiver(group)
 | |
| 
 | |
| 
 | |
| def sender(group):
 | |
|     addrinfo = socket.getaddrinfo(group, None)[0]
 | |
| 
 | |
|     s = socket.socket(addrinfo[0], socket.SOCK_DGRAM)
 | |
| 
 | |
|     # Set Time-to-live (optional)
 | |
|     ttl_bin = struct.pack('@i', MYTTL)
 | |
|     if addrinfo[0] == socket.AF_INET: # IPv4
 | |
|         s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, ttl_bin)
 | |
|     else:
 | |
|         s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_HOPS, ttl_bin)
 | |
| 
 | |
|     while True:
 | |
|         data = repr(time.time())
 | |
|         s.sendto(data + '\0', (addrinfo[4][0], MYPORT))
 | |
|         time.sleep(1)
 | |
| 
 | |
| 
 | |
| def receiver(group):
 | |
|     # Look up multicast group address in name server and find out IP version
 | |
|     addrinfo = socket.getaddrinfo(group, None)[0]
 | |
| 
 | |
|     # Create a socket
 | |
|     s = socket.socket(addrinfo[0], socket.SOCK_DGRAM)
 | |
| 
 | |
|     # Allow multiple copies of this program on one machine
 | |
|     # (not strictly needed)
 | |
|     s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
 | |
| 
 | |
|     # Bind it to the port
 | |
|     s.bind(('', MYPORT))
 | |
| 
 | |
|     group_bin = socket.inet_pton(addrinfo[0], addrinfo[4][0])
 | |
|     # Join group
 | |
|     if addrinfo[0] == socket.AF_INET: # IPv4
 | |
|         mreq = group_bin + struct.pack('=I', socket.INADDR_ANY)
 | |
|         s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
 | |
|     else:
 | |
|         mreq = group_bin + struct.pack('@I', 0)
 | |
|         s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq)
 | |
| 
 | |
|     # Loop, printing any data we receive
 | |
|     while True:
 | |
|         data, sender = s.recvfrom(1500)
 | |
|         while data[-1:] == '\0': data = data[:-1] # Strip trailing \0's
 | |
|         print (str(sender) + '  ' + repr(data))
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     main()
 |