2012-05-17 24 views
6

Ostatnio uczyłem się o gnieździe UDP, przeglądając sieć i wszystkie strony, które wyjaśniały, wspomniały, że gniazda UDP są " połączenie mniej ". To, jeśli rozumiem to poprawnie, oznacza, że ​​nie ma "połączenia" między dwoma gniazdami, ale zamiast tego strzela pakiety datagramowe do określonych punktów końcowych, nie wiedząc, czy drugi koniec nasłuchuje.connect na "connection less" boost :: asio :: ip :: udp :: socket

Potem idę i rozpocząć czytanie boost :: asio :: ip :: udp :: gniazdo docs i uważają, że wspomina API jak:

  • async_connect: Start asynchroniczny połączyć.
  • async_receive: Uruchom asynchroniczny odbiór na podłączonym gnieździe .
  • async_send: Rozpocznij asynchroniczne wysyłanie na podłączonym gnieździe .

Jest to nieco mylące dla nowicjuszy. mogę znaleźć 3 możliwe przyczyny mojego zamieszania (w kolejności likehood :))

  1. ja czegoś brakuje
  2. asio realizacja robi coś za kulisami do wirtualizacji połączenie.
  3. Dokumentacja jest źle

Istnieje również niewielkie usterki w docs, gdy otworzysz stronę dla basic_datagram_socket::async_connect przykładzie tam jest uruchamianiu TCP gniazda (zamiast UDP z nich).

Czy ktoś mógłby mnie oświecić?

Odpowiedz

11

specyfikacja Single UNIX ma lepsze wyjaśnienie co connect robi dla połączeń mniej gniazd:

Jeśli gniazdo inicjowanie nie jest gra-mode, a następnie połączyć() ustawia adres wzajemnej gniazda, ale nie połączenie jest wykonane. W przypadku gniazd SOCK_DGRAM, adres równorzędny identyfikuje miejsce, w którym wszystkie datagramy są wysyłane podczas kolejnych wywołań send(), i ogranicza zdalnego nadawcę dla kolejnych wywołań recv().

+0

+1 i jeśli nie było to oczywiste, jest to pomyłka nr 1 w pierwotnym pytaniu. –

Powiązane problemy