2009-10-06 14 views
5

Sembra che l'implementazione richiesta per configurare un socket multicast UDP sia cambiata tra Windows XP e Windows Vista. In particolare:Multicast UDP usando le differenze API di winsock tra XP e Vista

  • Sotto Windows XP, è must chiamata bind() prima è possibile fare riferimento le opzioni di socket specifiche multicast.

  • Tuttavia, in Windows Vista, si non è necessario chiamare bind() quando si tratta di socket multicast.

Il guasto di uno di questi due punti provoca un errore di socket in fase di esecuzione.

Sto diventando pazzo o ho visto anche altre persone? Esiste una soluzione migliore rispetto alla compilazione condizionale della chiamata bind()?

risposta

5

Quale errore state ottenendo dal setsockopt() chiamata effettuata da applicare IP_ADD_MEMBERSHIP e partecipare alla gruppo multicast?

Ho appena eseguito alcuni test qui con il mio framework server e noto che FACCIO chiamare bind() su Windows 7 (non ho una casella Vista a portata di mano) e posso quindi anche unirmi a un gruppo multicast come previsto purché sia ​​l'indirizzo di binding sia l'indirizzo multicast siano validi.

Tuttavia non posso chiamare bind() con INADDR_ANY, come che causa l'unione del gruppo multicast a fallire con errore 10022 (WSAEINVAL) e se l'indirizzo di gruppo multicast non è un indirizzo multicast valido la chiamata non riesce con l'errore 10049 (WSAEADDRNOTAVAIL). Che tutto sembra abbastanza giusto.

sto l'avvio di un dialogo XP ora ...

[Modificato dopo la prova su XP]

Su XP è legale bind()-INADDR_ANY ed è legale usare indirizzi multicast non validi. Quindi, mi aspetto, stai facendo uno di quelli e quindi funziona su XP e non su Vista/Win7.

Quindi, quale errore stai ricevendo e a quale indirizzo sei vincolante?

1

Non so su questo specifico argomento, ma so che lo stack di rete è stato riscritto da zero per Vista

+0

fantastico - penseresti che farebbero i test di regressione sul nuovo codice huh? Questo mi fa arrabbiare ... arrrrgggghhhHHH! – Thomi

0

Domanda molto vecchia, ma qualcuno sa come verificare quale versione di winsock è presente sulla macchina?

mi hanno alcune vecchie macchine che utilizzano ancora XP o Server 2003. ma i test per la versione di Windows non aiuta, a quanto pare è possibile avere una versione di Windows 5.1, che non accetta l'associazione prima, e un macchina con 5.2 Versione che lo accetta.

Problemi correlati