C/Visual C - socket y keepalive

 
Vista:

socket y keepalive

Publicado por Gonzalo Fernandez (1 intervención) el 22/11/2001 07:01:05
En primer lugar buenos dias a todos. Tengo un problemilla con un proceso servidor de socket (tipo stream).
Cuando la maquina donde reside el proceso cliente se cae y se cierra de forma no ordenada, el proceso servidor
no se entera y deja el descriptor del socket abierto (ESTABLISHED). El caso es que no puedo modificar el protocolo
entre el servidor y el cliente, puesto que el proceso del cliente no es mio, con lo cual no puedo enviar tramas de
control desde el servidor para saber si el cliente esta vivo. No tengo demasiado experiencia en esto, pero
investigando he encontrado lo siguiente.

int opcion=1;
int opcionLen=sizeof(opcion);

if (setsockopt(descriptorSocket, SOL_SOCKET, SO_KEEPALIVE, (char *)
&opcion, &opcionLen) < 0)
{
// Falla el intento de poner esta opcion
}

Si todo va bien, se supone que esto habilita un mecanismo de
transmisiones periódicas sobre un socket conectado, las cuales se efectúan
cuando no hay otro intercambio de datos en el socket. Si el otro no responde a
los mensajes, la conexión es considerada como terminada y en la variable
"so_error" (sys/socketvar.h) se pone el valor ETIMEDOUT.

El valor de so_error se puede consultar con:

if
(getsockopt(descriptorSocket,SOL_SOCKET,SO_ERROR,(char*)&opcion,sizeof(opcion))
<0)
{
// Falla
}

Se supone que si estuviese mal el socket, opcion tendría el valor ETIMEDOUT.

Bueno, pues NO ME FUNCIONA, que estoy haciendo mal?. El setsockopt se me
ejecuta bien, pero yo no sé si no envía las tramas de control o que pasa, lo peor de todo es que no
encuentro apenas documentación, no hay ejemplos.

Alguien me podria ayudar ????
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder