El 19/10/07, John Knight <[EMAIL PROTECTED]> escribió:
> hola
> tengo un servidor que debe tener un hilo para la atencion de clientes y
> entre otras cosas un hilo para procesar una simulación
> el servidor deberia finalizar una vez que la simulacion termina...
> entre que esta subido el servidor, los clientes se conectan y reciben los
> resultados real-time
> ahora tengo un problema: una vez que termina la simulacion debería hacer un
> stop() y un join() del hilo de atencion de clientes, pero el problema es que
> el accept es bloqueante
> (encapsule los hilos pthread en una clase, al igual q los sockets)
> una alternativa, la q recomendaron en Taller de Programacion I,es de cerrar
> el socket que esta a la escucha en el servidor
> para esto, sobrecargue el stop del hilo de atencion para que cierre el
> listener
> al cerrarse el socket el accept devuelve un etado de error y se desbloquea
> al hacerlo paso por paso el programa se cierra correctamente al terminar la
> simulacion
> pero al ejecutarlo por consola, se keda bloqueado en el join al hilo de
> atencion,como si no se se saliera del accept... no se porque en una funciona
> y en otra no
> alguien se le ocurre porque?
> otra alternativa que se me ocurre sería crear en el server un socket "bobo"
> q se conecte al server para destrabar el accept y poder finalizar bien
> la otra sería usar el select con un timeout que defino yo, y evitar que sea
> bloqueante. Esta ultima opcion no se si la puedo implementar por cuestiones
> de requerimientos de la cátedra de Taller.
> si alguien me tira una soga estare agradecido

Otra opción es usar señales. Las señales interrumpen muchas llamadas
al sistema operativo (entre ellas accept), en general saliendo esas
llamadas con un error EINTR (de interrupción). Podés "atajar" las
SIGINT (Ctrl-C) y SIGTERM (kill) para hacer que el programa termine
correctamente ante esas condiciones y en el stop() mandar un kill(pid,
SIGTERM) a "mano" para terminar el programa.

man 7 signal
man 2 signal
man 2 kill

-- 
Leandro Lucarella @ GMail

_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a