2012-05-17 7 views
6

Ultimamente ho imparato a conoscere il socket UDP navigando in rete e tutte le pagine che stavano spiegando stavano citando che i socket UDP sono " connessione meno ". Questo, se ho capito bene, significa che uno non ha una "connessione" tra due socket, ma invece scarica i pacchetti di datagrammi verso endpoint specificati senza sapere se l'altra estremità è in ascolto.connettersi su boost "connection less" :: asio :: ip :: udp :: socket

poi vado e iniziare a leggere il boost :: asio :: ip :: :: UDP presa docs e scoprire che si parla di API come:

  • async_connect: Avviare un asincrono connettersi.
  • async_receive: avvia una ricezione asincrona su una presa collegata .
  • async_send: avvia una mandata asincrona su una presa collegata.

Ora questo è un po 'di confusione per un principiante. Posso trovare 3 possibili cause per la mia confusione (in ordine di likehood :))

  1. mi manca qualcosa
  2. L'implementazione ASIO sta facendo qualcosa dietro le quinte per virtualizzare la connessione.
  3. La documentazione è sbagliato

C'è anche un leggero problema tecnico nella documentazione, quando si apre la pagina per basic_datagram_socket::async_connect l'esempio nella v'è istanziare TCP prese di corrente (al posto di UDP quelli).

Qualcuno potrebbe illuminarmi?

risposta

11

specifica Il Single UNIX ha una migliore spiegazione di ciò connect fa per prese di collegamento-meno:

Se la presa di avvio non connection-mode, quindi collegare() imposta l'indirizzo pari del socket, ma nessun la connessione è fatta. Per i socket SOCK_DGRAM, l'indirizzo peer identifica dove vengono inviati tutti i datagrammi sulle chiamate send() successive e limita il mittente remoto per le successive chiamate recv().

+0

+1 e se non era ovvio, questa è la confusione n. 1 nella domanda originale. –