Ya que la muchachada esta tan afilada hoy , ahi van dos consultitas
mas de un novato en Linux ...

(1)   En todos los UNIX que conozco si uno hace un script asi;

            snip>

            #!sh
            MIVARIABLE="ALGO"
            export MIVARIABLE

            <snap

Y uno ejecuta esto en una session al terminar la ejecucion encuentra
que las variable de entorno MIVARIABLE existe y continen "ALGO".

De que me perdi , que en Linux esto no sucede ?


(2)  Si hay algun programador ahi afuera tal vez me puedar tirar un
cabo con esto.

Estoy programando un servidor de audio para Internet ,  pero tengo
algunos problemas bastante raros con los sockets.

Cuando el server se inicia lanza varios threads para atender las
funciones de audio , una cola de solicitudes asincronicas y el proceso
principal queda en bucle esperando conexiones de los clientes.
Para ello usa un file descriptor set donde monta dos sockets abiertos
, uno para aceptar conexiones TCP y otro para UDP.
El pool de socket es examido con un  "select" (nonblocking)  para
determinar si tengo alguna solicitud de conexion, si es asi la abre
conecta, intercambian los mensajes , etc , y todo vuelve a comenzar.

Hasta ahi , todo funciona bien ,  pero si el servicio pasa un
determinado tiempo inactivo (sin solicitudes) el programa sale con un
error indicando que los sockets usados para recibir conexiones , y que
estubieron abiertos por largo rato ya no son validos.

Lo rastree con el debug  y el programa no los cierra en ningun momento
, pero cuando se produce el error sale del select con los sockets
cerrados en lugar de salir por TimeOut o IO de algun file descriptor
como deberia.

Esto no pasa en UNIX ni en OS2 , es mas el mismo programa compilado en
OS2 corre indefinidamente sin problemas .

La pregunta es , hay algo en el TCP de Linux que cierre sockets que
estuvieron inactivos durante un tiempo ?

De nuevo, cualquier info sera apreciada.
Gracias por anticipado y saludos,

Dario Fassi

Responder a