Fix for lingers socket issues on Freebsd
authorBrian Aker <brian@tangent.org>
Fri, 14 Dec 2007 10:15:03 +0000 (02:15 -0800)
committerBrian Aker <brian@tangent.org>
Fri, 14 Dec 2007 10:15:03 +0000 (02:15 -0800)
lib/memcached_connect.c

index f5acadfa6c61892a5261a4ff6f4179bb078465b9..98d7630f589dd9194dbbd64cfb50887716404c70 100644 (file)
@@ -140,12 +140,24 @@ static memcached_return tcp_connect(memcached_st *ptr, unsigned int server_key)
     {
       int error;
       struct linger linger;
+      struct timeval waittime;
+
+      waittime.tv_sec= 10;
+      waittime.tv_usec= 0;
 
       linger.l_onoff= 1; 
       linger.l_linger= MEMCACHED_DEFAULT_TIMEOUT; 
       error= setsockopt(ptr->hosts[server_key].fd, SOL_SOCKET, SO_LINGER, 
                         &linger, (socklen_t)sizeof(struct linger));
       WATCHPOINT_ASSERT(error == 0);
+
+      error= setsockopt(ptr->hosts[server_key].fd, SOL_SOCKET, SO_SNDTIMEO, 
+                        &waittime, (socklen_t)sizeof(struct timeval));
+      WATCHPOINT_ASSERT(error == 0);
+
+      error= setsockopt(ptr->hosts[server_key].fd, SOL_SOCKET, SO_RCVTIMEO, 
+                        &waittime, (socklen_t)sizeof(struct timeval));
+      WATCHPOINT_ASSERT(error == 0);
     }
 
     if (ptr->flags & MEM_TCP_NODELAY)