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