/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Problema con los sockets en modo bloqueante.

 
      Índice del Foro elrincondelc.com -> Programación en Servidores
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Hugo_Real



Registrado: 20 Abr 2006
Mensajes: 3

MensajePublicado: 21/04/2006 3:29 am
Título: Problema con los sockets en modo bloqueante.

Tengo una aplicación cliente que se comunica por sockets tcp con el servidor. Se comunican mediante diálogo pregunta/respuesta, esto es: el cliente pide un bloque de datos y el servidor se lo manda, el cliente lo lee y pide el siguiente. Hasta que no ha leido el bloque no pide el siguiente. Los sockets funcionan en modo bloqueante para que no hablen los dos a la vez. Hasta ahí todo correcto (al menos en teoría).
Al probarlo hace la primera petición y obtiene la respuesta de forma correcta pero al hacer la segunda tanto el servidor como el cliente se quedan "zombies". He probado a poner un retardo de 10 milisegundos después de la lectura del bloque y la aplicación funciona correctamente, pero poner un retardo no me parece una solución óptima dado que podría no funcionar igual en todas las máquinas.
¿Alguien puede ayudarme?
Volver arriba
pardu



Registrado: 03 Ago 2006
Mensajes: 11

MensajePublicado: 04/08/2006 12:36 pm
Título:

zombies? te refieres al estado del proceso o solo es una manera de hablar?, por favor aclara esto y pone un poco de código para que sea más facil ver como envias y recibes de cada lado.

Pardu
Volver arriba
Tavo92



Registrado: 18 Ago 2006
Mensajes: 48
Ubicación: Buenos Aires, Argentina

MensajePublicado: 19/08/2006 11:33 am
Título:

Segun logre entender, el servidor espera respuesta del lciente y mientras se queda sin hacer nada, es decir se crea una funcion zombie.
Ahora, lo del intervalo para saber si no esta bloqueado es uan buena idea, pero siempre con Sockets la mejor solucion es utilizar MultiThreading para que no se te quede colgado (En realidad, lo que permite es que puedas hacer demas procesos, "THREADS", mientras ejecutas el socket).
Si te explayas mejor puede ser que encuentre otra respuesta.
Volver arriba
ciomar



Registrado: 01 Abr 2007
Mensajes: 5

MensajePublicado: 01/04/2007 7:06 pm
Título:

Tavo92 escribió:
Segun logre entender, el servidor espera respuesta del lciente y mientras se queda sin hacer nada, es decir se crea una funcion zombie.
Ahora, lo del intervalo para saber si no esta bloqueado es uan buena idea, pero siempre con Sockets la mejor solucion es utilizar MultiThreading para que no se te quede colgado (En realidad, lo que permite es que puedas hacer demas procesos, "THREADS", mientras ejecutas el socket).
Si te explayas mejor puede ser que encuentre otra respuesta.


El socket se bloquea cuando el otro extremo no finaliza la conexion. es decir si yo realizo un:

while (size=read(socket,buf,1024)) {
....
}


hasta que no finalice la conección de "socket" se bloquea cada vez que se dejan de enviar datos desde el proceso remoto. "size" va a valer "0" cuando el otro extremo finalice la conexion, de otro modo, se va a bloquear el hilo/proceso en cuestion...
Volver arriba
Diabliyo



Registrado: 14 Abr 2004
Mensajes: 317
Ubicación: En la Luna

MensajePublicado: 28/10/2007 9:41 am
Título:

Pon el codigo completo amigo.. para poder solucionarte !!...

Un socket bloqueante, es cuando ALGUIEN esta escribiendo en el socket, los demas NO podran utilizaro, sino hasta que se termine de LEER o ESCRIBIR, es cuando los demas podran utilizarlo...

Un socket no-bloqueante significa que se puede leer y escribir a la vez, esto con lleva a lo que se denomina como: "utilizacion del mismo puerto para comunicarse", o "leer al mismo tiempo qye escribir"... el problema del ocket no-bloqueante, es que se puede quedar PARADO o BLOQUEADO hasta que reciva una senal...

Correcion para Hugo_Real
La palabra ZOMBIE se atribuye a que dentro del tema de PROCESOS e HILOS, zombie significa que el proceso ha quedado detenido o bloqueado, hasta que su proceso padre lo desbloquee o lo finalize.

Correcion para Tavo92
No tratemos de ENROLLAR mas el asunto metiendo PROCESOS e HILOS asi a la ligera...
Ya que Hugo_Real solo desea la comunicacion pregunta y respuesta... la implementacion de hilos y/o procesos solo seria en que caso que se requiera LEER y ESCRIBIR a la vez dentro del socket bloqueante !!... (me refiero a tener un recv() para entradas y send() para cuando se desee escribir sin necesidad de esperar por PREGUNTAS o RESPUESTAS)

bye bye
_________________

Volver arriba
      Índice del Foro elrincondelc.com -> Programación en Servidores
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com