Prototype of a protocol parsing library for the binary protocol
[m6w6/libmemcached] / libmemcached / memcached_connect.c
index e9ae0c76d92c9c0bef3a4e53ab1c7ee10731da15..833ad0efba97f9b9eb126d7f177ab1bb4147aff9 100644 (file)
@@ -81,12 +81,13 @@ static memcached_return set_socket_options(memcached_server_st *ptr)
   }
 #endif
 
+  if (ptr->root->flags & MEM_NO_BLOCK)
   {
     int error;
     struct linger linger;
 
     linger.l_onoff= 1; 
-    linger.l_linger= MEMCACHED_DEFAULT_TIMEOUT; 
+    linger.l_linger= 0; /* By default on close() just drop the socket */ 
     error= setsockopt(ptr->fd, SOL_SOCKET, SO_LINGER, 
                       &linger, (socklen_t)sizeof(struct linger));
     WATCHPOINT_ASSERT(error == 0);
@@ -152,7 +153,7 @@ static memcached_return unix_socket_connect(memcached_server_st *ptr)
     servAddr.sun_family= AF_UNIX;
     strcpy(servAddr.sun_path, ptr->hostname); /* Copy filename */
 
-    addrlen= strlen(servAddr.sun_path) + sizeof(servAddr.sun_family);
+    addrlen= (socklen_t) (strlen(servAddr.sun_path) + sizeof(servAddr.sun_family));
 
 test_connect:
     if (connect(ptr->fd, 
@@ -218,7 +219,7 @@ static memcached_return network_connect(memcached_server_st *ptr)
 
       (void)set_socket_options(ptr);
 
-      int flags;
+      int flags= 0;
       if (ptr->root->connect_timeout)
       {
         flags= fcntl(ptr->fd, F_GETFL, 0);
@@ -306,6 +307,7 @@ memcached_return memcached_connect(memcached_server_st *ptr)
   LIBMEMCACHED_MEMCACHED_CONNECT_START();
 
   /* both retry_timeout and server_failure_limit must be set in order to delay retrying a server on error. */
+  WATCHPOINT_ASSERT(ptr->root);
   if (ptr->root->retry_timeout && ptr->root->server_failure_limit)
   {
     struct timeval next_time;