2009-10-06 6 views
5

Wygląda na to, że implementacja wymagana do skonfigurowania gniazda multiemisji UDP zmieniła się między Windows XP i Windows Vista. Konkretnie:Rozgłaszanie grupowe UDP przy użyciu winsock Różnice API między XP a Vista

  • pod Windows XP, koniecznością wezwanie bind() zanim będzie można odwoływać żadnych opcji gniazda multicast specyficzne.

  • jednak pod Windows Vista, nie musi pan rozmowy bind() gdy ma do czynienia z gniazdami multicast.

Awaria jednego z tych dwóch punktów powoduje błąd gniazda w czasie wykonywania.

Czy zwariowałem, czy inni też to widzieli? Czy istnieje lepsze rozwiązanie niż warunkowa kompilacja wywołania bind()?

Odpowiedz

5

Jaki błąd Czy otrzymujesz od wezwania setsockopt() że można zrobić, aby zastosować IP_ADD_MEMBERSHIP i przyłączyć się do grupa multiemisji?

Po prostu uruchomiłem tutaj kilka testów z moją strukturą serwera i zauważam, że nazywam się bind() w systemie Windows 7 (nie mam do dyspozycji pudełka Vista) i mogę również dołączyć do grupy multiemisji zgodnie z oczekiwaniami o ile ważny jest zarówno adres powiązania, jak i adres multiemisji.

Jednak nie można wywołać metody bind() z INADDR_ANY, ponieważ powoduje to, że dołączenie grupy multiemisji zakończyło się niepowodzeniem z błędem 10022 (WSAEINVAL), a jeśli adres grupy multiemisji nie jest poprawnym adresem multiemisji, połączenie nie powiedzie się z błędem 10049 (WSAEADDRNOTAVAIL). Które wszystko wydaje się sprawiedliwe.

mam uruchamiania skrzynkę XP teraz ...

[Edytowane po przetestowaniu na XP]

Na XP jest to legalne bind() do INADDR_ANY i jest to legalne użycie nieprawidłowych adresów multicast. Tak więc, spodziewam się, robisz jedną z nich i dlatego działa na XP, a nie na Vista/Win7.

A więc, jaki błąd otrzymujesz i do jakiego adresu się zobowiązujesz?

1

nie wiem o tej konkretnej kwestii, ale wiem, że stos sieciowy został przepisany od podstaw dla Vista

+0

Świetnie - można by pomyśleć, że zrobią testy regresji na nowym kodzie, huh? To mnie denerwuje ... arrrrgggghhhHHH! – Thomi

0

Cóż bardzo stare pytanie, ale czy ktoś wie, jak sprawdzić, która wersja winsock jest obecna na maszynie?

Mam kilka starych maszyn nadal używa XP lub Server 2003. Ale badań dla Windows wersja nie pomoże, wydaje się, że jest możliwe, że wersja systemu Windows 5.1, który nie przyjmuje bind przed, a maszyna posiadająca wersję 5.2 akceptującą to.

Powiązane problemy