Вот пример работающего кода. Проверено на Python 2.7.
import socket
if not hasattr(socket, 'IP_ADD_SOURCE_MEMBERSHIP'):
setattr(socket, 'IP_ADD_SOURCE_MEMBERSHIP', 39)
group = '239.192.70.40'
port = 40040
bind = '0.0.0.0'
source = '10.50.129.90'
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
imr = (socket.inet_pton(socket.AF_INET, group) + socket.inet_pton(socket.AF_INET, bind) + socket.inet_pton(socket.AF_INET, source))
s.setsockopt(socket.IPPROTO_IP, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_SOURCE_MEMBERSHIP, imr)
s.bind((group,port))
while True:
msg = s.recv(16384)
print len(msg)