fix bug in handling some single letter command line options
[m6w6/libmemcached] / lib / memcached_response.c
index 99020559dfd57de419ce7daeaf3daae3ba367e86..693f9b30520a71c0f21f875ffc095090b25e8c6f 100644 (file)
@@ -8,12 +8,13 @@
 #include <memcached.h>
 
 memcached_return memcached_response(memcached_st *ptr, 
-                                    char *buffer, size_t buffer_length)
+                                    char *buffer, size_t buffer_length,
+                                    unsigned int server_key)
 {
   size_t send_length;
 
   memset(buffer, 0, buffer_length);
-  send_length= read(ptr->hosts[0].fd, buffer, buffer_length);
+  send_length= read(ptr->hosts[server_key].fd, buffer, buffer_length);
 
   if (send_length)
     switch(buffer[0])
@@ -42,8 +43,15 @@ memcached_return memcached_response(memcached_st *ptr,
         else
           return MEMCACHED_UNKNOWN_READ_FAILURE;
       }
-    case 'E': /* PROTOCOL ERROR */
-      return MEMCACHED_PROTOCOL_ERROR;
+    case 'E': /* PROTOCOL ERROR or END */
+      {
+        if (buffer[1] == 'N')
+          return MEMCACHED_NOTFOUND;
+        else if (buffer[1] == 'R')
+          return MEMCACHED_PROTOCOL_ERROR;
+        else
+          return MEMCACHED_UNKNOWN_READ_FAILURE;
+      }
     case 'C': /* CLIENT ERROR */
       return MEMCACHED_CLIENT_ERROR;
     default: