2011-09-19 25 views
8

"Ascolto" di una porta indica un polling continuo a tale porta o un polling discreto o un processo guidato da interrupt. Cosa sta succedendo esattamente in "Ascoltare una porta"?Che cosa è esattamente l'ascolto della porta

+0

questo è da programmers.stackexchange [how-a-port-listens-pull-or-push] descrive in profondità. [1]: http://programmers.stackexchange.com/q/107545/36957 – Dinushan

+0

La risposta descrive i meccanismi di livello molto basso, sotto le nozioni di * tcp/udp *, * ports * e anche * listening *, è vero per qualsiasi ricezione dati di rete. – Kevin

risposta

7

Un porta non è altro che un concetto , non è come se si potrebbe verificare qualche bit di memoria, in attesa di qualche informazione.

Quindi, ascoltando a una porta si insegnare al kernel cosa fare dopo aver ricevuto i pacchetti con questo specifico numero di porta: trasmette al processo che ha chiesto per l'ascolto su quella porta, invece di rispondere [o meno] che la porta non è aperta.

NB: sono solo speculazioni, non ho studiato nessuna implementazione del kernel.

EDIT: Sul lato processo,

  • listen dirà al kernel che siete interessati a una particolare porta rendez-vous
  • (io non sono sicuro di quello che accade tra listen e accept, il kernel bufferizza le nuove connessioni o le rifiuta finché non è stato chiamato accept, fare riferimento al relativo manuale)
  • accept si legheranno la connessione ad una porta comunicazione, e avviare il buffering dei pacchetti entranti
  • recv (o poll o select certamente) saranno dati al prelievo dal buffer di ricezione
+0

ciò significa che il kernel interromperà (notificherà) il processo quando questo pacchetto viene ricevuto. – Dinushan

5

Il kernel estrae la porta di destinazione da arrivo Pacchetti IP e quindi inoltra il pacchetto a tutti i ricevitori, che sono registrati per questa porta specifica (sì, potrebbero esserci più). Un processo utente utilizza normalmente select (2) o poll (2) per attendere un evento, ma questo sondaggio è diverso dal polling tradizionale come "read I/O port; delay 500 ms".

Problemi correlati