#!/usr/bin/python
"""
	multirecv.py

	This program joins the multicast group corresponding to
	the specified multicast address and displays all of the
	messages sent to that group.  Our code has been adapted
	from an online multicast example by Jason R. Briggs. 

	programmer: ALLAN CRUSE
	written on: 05 JAN 2009
"""

import socket, struct

group = "224.3.3.6"
saddr = socket.gethostbyname( group )
port = 54321
sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
buflen = 256
sock.bind( ( saddr, port ) )
ifaddr = socket.INADDR_ANY
skaddr = socket.inet_pton( socket.AF_INET, saddr )
mreq = struct.pack( '4sl', socket.inet_aton( saddr ), ifaddr )

try:
	sock.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 )

except socket.error, ( value, message ):
	print message

else:
	try:
	  sock.setsockopt( socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq )

	except socket.error, ( value, message ):
	  print message

	else:
	  while True:
		message, address = sock.recvfrom( 256 ) 
		print message

	  sock.close()