2011-09-19 25 views
8

"Escuchando" un puerto significa un sondeo continuo a ese puerto o un sondeo discreto o un proceso impulsado por interrupción. ¿Qué está pasando exactamente en "Escuchando un puerto"?¿Qué es exactamente Puerto escuchando

+0

esto es de programmers.stackexchange [how-a-port-listens-pull-or-push] describe en profundidad. [1]: http://programmers.stackexchange.com/q/107545/36957 – Dinushan

+0

La respuesta describe los mecanismos de muy bajo nivel, debajo de las nociones de * tcp/udp *, * ports * e incluso * listening *, es cierto para cualquier recepción de datos de red. – Kevin

Respuesta

7

Un puerto no es más que un concepto , no es como si se pudiera comprobar algunos bits de memoria, a la espera de alguna información.

Así, escuchar a un puerto se enseñar al núcleo qué hacer después de recibir los paquetes con este número de puerto específico: transmitirlo al proceso que pidió que escuche en ese puerto, en lugar de responder [o no] que el puerto no está abierto.

NB: eso son solo especulaciones, no investigué ninguna implementación del kernel.

EDIT: En el lado del proceso,

  • listen le dirá al núcleo que está interesado en un determinado puerto cita
  • (no estoy seguro de lo que sucede entre listen y accept, el kernel almacena las nuevas conexiones o las rechaza hasta que se haya llamado al accept, consulte el manual correspondiente)
  • accept va a unir la conexión a un puerto comunicación, y empezar a almacenar temporalmente los paquetes entrantes
  • recv (o poll o select duda) entrega la información recogida desde el buffer de recepción
+0

eso significa que Kernel interrumpirá (notificará) el proceso cuando se reciba este paquete. – Dinushan

5

El núcleo extrae el puerto de destino del entrante IP-packets y luego reenvía el paquete a todos los receptores, que se registraron para este puerto específico (sí, puede haber varios). Un proceso de usuario normalmente usa select (2) o poll (2) para esperar un evento, pero este sondeo es diferente del sondeo tradicional como "leer puerto de E/S, retrasar 500 ms".