Sockets : Timeout en Send() y Recv()

Bueno he encontrado una forma más fácil de hacer un timeout en los socket(anteriormente usaba la técnica de las alarmas, en total hay 3 técnicas para evitar el cuelgue indefinido), para evitar que se queden colgados en los send() y en los recv().

Tras crear el socket ponemos(para un timeout de 15 segundos por ejemplo):

//Si es TCP
if ((descriptor=socket(AF_INET, SOCK_STREAM, 0))==-1) throw Excepcion(“Error al crear el socket TCP”);
//Si es UDP
//if ((descriptor=socket(AF_INET, SOCK_DGRAM, 0))==-1) throw Excepcion(“Error al crear el socket UDP”);

//Definimos el timeout
struct timeval tv;
tv.tv_sec = 15;
tv.tv_usec = 0;
setsockopt(descriptor, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
setsockopt(descriptor, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv));

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: