2010年5月11日 星期二

[socket] set read/write timeout values for blocking socket

Set timeout to 10 seconds when doing read () or write () a blocking sock :

#define SOCK_RCV_TIMEOUT 10
#define SOCK_SND_TIMEOUT 10

void set_rw_timeout (int sock, int clear_timeout)
{
struct timeval rw_timeout;

memset (&rw_timeout, 0, sizeof (struct timeval));
rw_timeout.tv_sec = clear_timeout ? 0 : SOCK_RCV_TIMEOUT;

if (setsockopt (sock, SOL_SOCKET, SO_RCVTIMEO, &rw_timeout, sizeof (struct timeval))) {
fprintf (stderr, "setsockopt SO_RCVTIMEO failed\n");
}

memset (&rw_timeout, 0, sizeof (struct timeval));
rw_timeout.tv_sec = clear_timeout ? 0 : SOCK_SND_TIMEOUT;

if (setsockopt (sock, SOL_SOCKET, SO_SNDTIMEO, &rw_timeout, sizeof (struct timeval))) {
fprintf (stderr, "setsockopt SO_SNDTIMEO failed\n");
}
}