[C con Clase] Duda con sockets

Programante programante en gmail.com
Mar Jun 2 22:33:08 CEST 2009


Matias V. escribió:
> Hola, estoy empezandoa programar sockets y necesitaria aclarar una
> duda sobre la ejecucion de un programa que hace uso de los mismos.
>
> El siguiente es el codigo de un servidor que solamente envia la cadena
> "Prueba socket" (es un ejemplo modificado de uno que aparece en la
> guia beej):
>
> ..................................................................................................................................................................................................................................
>
>
> El programa se compila y funciona sin problemas.Lo que no entiendo es
> como se va ejecuntando el codigo. Hasta donde entiendo primero se crea
> un socket usando la función socket() , luego se asocia dicho socket a
> un puerto y una dirección usando bind(), y luego se ejecuta la función
> listen() que le indica al S.O. que se quede fijando si hay conexiones
> entrantes.Es decir (esta sería la duda) que cuando se ejecuta listen()
> ¿el programa detiene su ejecución en ese punto y se queda "esperando"
> un pedido de conexión, y continua ejecutandose cuando lo recibe?. ¿O
> es cuando aparece la función accept que el programa se queda esperando
> hasta que aparesca una conexión, es decir "le pregunta" al S.O. si
> hubo alguna conexión y en caso afirmativo la acepta o en caso negativo
> se que esperando hasta que halla alguna ?. Pregunto esto porque miro
> el codigo y me parece que si en listen() o accept() el programa no se
> detuviera, este llegaria al final y terminaria ya que en el mismo no
> hay ningun loop.

Se bloquea en accept (a menos que hayas establecido previamente el
socket como no bloqueante).
Después de haber llamado a listen(), el sistema aceptará BACKLOG
conexiones en una cola hasta que empiece a rechazar (normalmente
llamarás a accept mucho antes).
Fíjate que podrías seguir trabajando en otras cosas y vigilar con
select() (u otro método) el momento en que hay conexiones esperando,
momento en el cual llamarías a accept sin quedarte bloqueado (puesto que
sabes que hay algo, no te bloquearás).







Más información sobre la lista de distribución Cconclase