sockets: multiple Binds



  • Hallo,

    ich möchte einen UDP-Socket erstellen, mit dem ich Multicast-Pakete empfangen kann.
    Dazu mache ich folgendes:

    // create a socket to join multicast group on
    if( (m_iSocket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0 )
    {
      // create socket failed!
      return false;
    }
    
    // set reuse port to allow multiple binds per host
    bool flag_on = true;
    int rc = ::setsockopt( socketData->m_iSocket, SOL_SOCKET, SO_REUSEADDR, (const char*)&flag_on, sizeof(flag_on) );
    
    if( rc < 0 )
    {
      // Allow multiple binds failed!
      return false;
    }
    
    // bind socket
    // .....
    
    // send ADD_MEMBERSHIP message for ip ...
    // send ADD_MEMBERSHIP message for ip ....
    // usw...
    

    Da ich Pakete von mehreren MulticastIPs auf demselben Port empfangen will, muss ich multiple binds erlauben. Bei Windows funktioniert das alles. Bei Linux bekomm ich in der folgenden Zeile als Rückgabewert "-1" geliefert.

    int rc = ::setsockopt( m_iSocket, SOL_SOCKET, SO_REUSEADDR, (const char*)&flag_on, sizeof(flag_on) );
    

    Das Erlauben von multiple binds funktioniert also nicht.
    Weiß jemand warum das unter Windows funktioniert und unter Linux nicht??
    Hab ich vielleicht irgendwas vergessen?

    Danke schon mal im voraus!



  • Ich hab jetzt endlich ne Lösung gefunden 🙂

    Die Variable "flag_on" muss vom Typ Integer sein...

    // set reuse port to allow multiple binds per host
    int flag_on = 1;
    int rc = ::setsockopt( socketData->m_iSocket, SOL_SOCKET, SO_REUSEADDR, (const char*)&flag_on, sizeof(flag_on) );
    

    Viele Grüße


Anmelden zum Antworten