setitimer y select

david_s
28 de Julio del 2003
Hola grupo,

Tengo un problema con la funcion setitimer y la funcion select. La cuestión es que por separado funcionan bien, pero cuando las pongo en el mismo programa, cuando la alarma de setitimer salta, hace que el select se aborte con error.

Alguna solucion?

Gracias
David

chuidiang
28 de Julio del 2003
Eso es normal. La función select() sale cuando hay algo para leer/escribir o cuando se recibe una señal. La función setitimer hacer que se reciba una señal cuando pasa el tiempo establecido.

La solucion es comprobar si select() ha saltado por una señal (devuelve -1 y la variable errno se poner a EINTR). En ese caso, volver a meterse en el select().

Ten cuidado porque las funciones read(), write() o las que uses también saltan con las señales, dejandote a medio escribir o leer lo que sea.

Se bueno

david_s
28 de Julio del 2003
Gracias.

He probado de meter el setitimer en la funcion main y el select en un hilo aparte, y parece que funciona bien.

Una pregunta sobre el setitimer. Yo hago que cuando se dispara el setitimer ejecute una funcion, pero ¿y si se vuelve a disparar mientras se esta ejecutando la funcion? que pasa entonces? se espera a que acabe?

chuidiang
28 de Julio del 2003
Pues no lo se. Supongo que es cuestión de hacer alguna prueba.

Se bueno.