Multicast et switchs

Top Page

Reply to this message
Author: Frédéric
Date:  
To: Guilde
Subject: Multicast et switchs
Hello,

Dans mon framework python pour bus KNX, qui repose sur une transmission
multicast des données, j'initialise mon socket de réception de la façon
suivante :

class MCastRecv(socket):
  def __init__(self, localAddr, localPort, mcastAddr, mcastPort):
    super(MCastRecv, self).__init__(AF_INET, SOCK_DGRAM, IPPROTO_UDP)


    self.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
    #self.setsockopt(SOL_SOCKET, SO_REUSEPORT, 1)
    self.setsockopt(SOL_IP, IP_MULTICAST_TTL, 32)
    self.setsockopt(SOL_IP, IP_MULTICAST_LOOP, 1)


    self._sock.bind(("", localPort))


    self.setsockopt(SOL_IP, IP_MULTICAST_IF, inet_aton(localAddr))
    self.setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP,
                    inet_aton(mcastAddr) + inet_aton(localAddr))


    self.settimeout(1)


Quelqu'un m'a proposé un patch ; il s'agit de remplacer :

    self.setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP,
                    inet_aton(mcastAddr) + inet_aton(localAddr))


par :

    value = struct.pack("=4sl", inet_aton(mcastAddr), INADDR_ANY)
    self.setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP, value)


avec cette explication :

"It makes the client subscribe to the multicast address. This is
important in a scenario with multicast-aware switches/routers. If you
don't subscribe to a multicast address, a multicast-aware switch/router
will not forward the multicast messages to you. If you are working with
"cheap/non-multicast-aware" switches this doesn't matter since the
switch will treat all multicasts als broadcasts."

J'avoue ne pas bien piger la subtilité qu'il y a entre les 2 formes...

Si quelqu'un a plus d'infos, je suis preneur !

Merci d'avance.

-- 
    Frédéric