mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	 49fd7fa443
			
		
	
	
		49fd7fa443
		
	
	
	
	
		
			
			number of tests, all because of the codecs/_multibytecodecs issue described here (it's not a Py3K issue, just something Py3K discovers): http://mail.python.org/pipermail/python-dev/2006-April/064051.html Hye-Shik Chang promised to look for a fix, so no need to fix it here. The tests that are expected to break are: test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecs test_multibytecodec This merge fixes an actual test failure (test_weakref) in this branch, though, so I believe merging is the right thing to do anyway.
		
			
				
	
	
		
			93 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| # Send/receive UDP multicast packets.
 | |
| # Requires that your OS kernel supports IP multicast.
 | |
| # This is built-in on SGI, still optional for most other vendors.
 | |
| #
 | |
| # Usage:
 | |
| #   mcast -s (sender)
 | |
| #   mcast -b (sender, using broadcast instead multicast)
 | |
| #   mcast    (receivers)
 | |
| 
 | |
| MYPORT = 8123
 | |
| MYGROUP = '225.0.0.250'
 | |
| 
 | |
| import sys
 | |
| import time
 | |
| import struct
 | |
| from socket import *
 | |
| 
 | |
| 
 | |
| # Main program
 | |
| def main():
 | |
|     flags = sys.argv[1:]
 | |
|     #
 | |
|     if flags:
 | |
|         sender(flags[0])
 | |
|     else:
 | |
|         receiver()
 | |
| 
 | |
| 
 | |
| # Sender subroutine (only one per local area network)
 | |
| def sender(flag):
 | |
|     s = socket(AF_INET, SOCK_DGRAM)
 | |
|     if flag == '-b':
 | |
|         s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
 | |
|         mygroup = '<broadcast>'
 | |
|     else:
 | |
|         mygroup = MYGROUP
 | |
|         ttl = struct.pack('b', 1)               # Time-to-live
 | |
|         s.setsockopt(IPPROTO_IP, IP_MULTICAST_TTL, ttl)
 | |
|     while 1:
 | |
|         data = repr(time.time())
 | |
| ##              data = data + (1400 - len(data)) * '\0'
 | |
|         s.sendto(data, (mygroup, MYPORT))
 | |
|         time.sleep(1)
 | |
| 
 | |
| 
 | |
| # Receiver subroutine (as many as you like)
 | |
| def receiver():
 | |
|     # Open and initialize the socket
 | |
|     s = openmcastsock(MYGROUP, MYPORT)
 | |
|     #
 | |
|     # Loop, printing any data we receive
 | |
|     while 1:
 | |
|         data, sender = s.recvfrom(1500)
 | |
|         while data[-1:] == '\0': data = data[:-1] # Strip trailing \0's
 | |
|         print sender, ':', repr(data)
 | |
| 
 | |
| 
 | |
| # Open a UDP socket, bind it to a port and select a multicast group
 | |
| def openmcastsock(group, port):
 | |
|     # Import modules used only here
 | |
|     import string
 | |
|     import struct
 | |
|     #
 | |
|     # Create a socket
 | |
|     s = socket(AF_INET, SOCK_DGRAM)
 | |
|     #
 | |
|     # Allow multiple copies of this program on one machine
 | |
|     # (not strictly needed)
 | |
|     s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
 | |
|     #
 | |
|     # Bind it to the port
 | |
|     s.bind(('', port))
 | |
|     #
 | |
|     # Look up multicast group address in name server
 | |
|     # (doesn't hurt if it is already in ddd.ddd.ddd.ddd format)
 | |
|     group = gethostbyname(group)
 | |
|     #
 | |
|     # Construct binary group address
 | |
|     bytes = map(int, string.split(group, "."))
 | |
|     grpaddr = 0
 | |
|     for byte in bytes: grpaddr = (grpaddr << 8) | byte
 | |
|     #
 | |
|     # Construct struct mreq from grpaddr and ifaddr
 | |
|     ifaddr = INADDR_ANY
 | |
|     mreq = struct.pack('ll', htonl(grpaddr), htonl(ifaddr))
 | |
|     #
 | |
|     # Add group membership
 | |
|     s.setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP, mreq)
 | |
|     #
 | |
|     return s
 | |
| 
 | |
| 
 | |
| main()
 |