[Grulic-dev] Liberar un socket

Página superior
Adjuntos:
+ (text/plain)
Eliminar este mensaje
Responder a este mensaje
Autor: Anthony Lenton
Fecha:  
A: Lista de Desarrolladores de Software Libre de Córdoba
Cc: 
Asunto: [Grulic-dev] Liberar un socket
Hola,

Cuando un proceso está usando un socket tcp, al matarlo y bajo ciertas
condiciones (a la mitad de atender un pedido, por ejemplo), el socket
queda como si estuviera ocupado, todavía bindeado por este proceso que
ya no existe. En esos casos intentar bindearlo de nuevo (relanzando
el proceso, por ejemplo) falla con un error "Address already in use".

Lo que nos queda en estos casos es esperar un par de minutos a que
el socket se libere solito y relanzar el proceso; pero hay veces que
no queremos esperar.

Alguien sabe entonces cómo hacer alguna de las siguientes cosas?

- Indicarle al proceso que si recibe inesperadamente un SIGKILL o
SIGTERM cierre prolijamente los sockets antes de salir.

- Liberar un socket tcp por la fuerza desde el sistema operativo con
alguna aplicación para liberar sockets (un destapacañerías vendría
bien)

- Indicarle al bind que intente tomar el socket por más que parezca
que ya está tomado, jurandole que en realidad el socket está libre

- Algo que no se me haya ocurrido y que sirva para lo mismo.

Estoy laburando en python y el socket está abstraido prolijamente
adentro de un SimpleXMLRPCServer, pero hay que meterle el dedo en el
socket lo hago. Si saben hacerlo en cualquier idioma también
avisen...

a.