old_contents: # Send/receive UDP multicast packets (SGI)
  # After /usr/people/4Dgifts/examples/network/mcast.c
  # Usage:
  #   mcast -s (sender)
  #   mcast    (receivers)
  
  MYPORT = 8123
  MYGROUP_BYTES = 225, 0, 0, 250
  
  import sys
  import time
  import struct
  from socket import *
  from SOCKET import *
  from IN import *
  
  sender = (sys.argv[1:2] == ['-s'])
  
  s = socket(AF_INET, SOCK_DGRAM)
  
  if sender:
  	# Ugly: construct decimal IP address string from MYGROUP_BYTES
  	mygroup = ''
  	for byte in MYGROUP_BYTES: mygroup = mygroup + '.' + `byte`
  	mygroup = mygroup[1:]
  	ttl = struct.pack('b', 1)		# Time-to-live
  	s.setsockopt(IPPROTO_IP, IP_MULTICAST_TTL, ttl)
  	while 1:
  		data = `time.time()` + '\n'
  		s.sendto(data, (mygroup, MYPORT))
  		time.sleep(5)
  else:
  	# Bind the socket to my port
  	s.bind('', MYPORT)
  
  	# Allow multiple copies of this program on one machine
  	s.setsockopt(SOL_SOCKET, SO_REUSEPORT, 1) # (Not strictly needed)
  
  	# Ugly: construct binary group address from MYGROUP_BYTES
  	grpaddr = 0
  	for byte in MYGROUP_BYTES: grpaddr = (grpaddr << 8) | byte
  
  	# Construct struct mreq from grpaddr and ifaddr
  	ifaddr = INADDR_ANY
  	mreq = struct.pack('ll', grpaddr, ifaddr)
  
  	# Add group membership
  	s.setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP, mreq)
  
  	# 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, ':', `data`
  
new_contents: # Send/receive UDP multicast packets (SGI)
  # After /usr/people/4Dgifts/examples/network/mcast.c
  # Usage:
  #   mcast -s (sender)
  #   mcast -b (sender, using broadcast instead multicast)
  #   mcast    (receivers)
  
  MYPORT = 8123
  MYGROUP_BYTES = 225, 0, 0, 250
  
  import sys
  import time
  import struct
  from socket import *
  from SOCKET import *
  from IN import *
  
  sender = sys.argv[1:]
  
  s = socket(AF_INET, SOCK_DGRAM)
  
  if sender:
  	if sys.argv[1] == '-b':
  		s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
  		mygroup = '<broadcast>'
  	else:
  		# Ugly: construct decimal IP address string from MYGROUP_BYTES
  		mygroup = ''
  		for byte in MYGROUP_BYTES: mygroup = mygroup + '.' + `byte`
  		mygroup = mygroup[1:]
  		ttl = struct.pack('b', 1)		# Time-to-live
  		s.setsockopt(IPPROTO_IP, IP_MULTICAST_TTL, ttl)
  	while 1:
  		data = `time.time()`
  ##		data = data + (1400 - len(data)) * '\0'
  		s.sendto(data, (mygroup, MYPORT))
  		time.sleep(1)
  else:
  	# Bind the socket to my port
  	s.bind('', MYPORT)
  
  	# Allow multiple copies of this program on one machine
  	s.setsockopt(SOL_SOCKET, SO_REUSEPORT, 1) # (Not strictly needed)
  
  	# Ugly: construct binary group address from MYGROUP_BYTES
  	grpaddr = 0
  	for byte in MYGROUP_BYTES: grpaddr = (grpaddr << 8) | byte
  
  	# Construct struct mreq from grpaddr and ifaddr
  	ifaddr = INADDR_ANY
  	mreq = struct.pack('ll', grpaddr, ifaddr)
  
  	# Add group membership
  	s.setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP, mreq)
  
  	# 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, ':', `data`
  
subject: Add -b option and sleep shorter.