void memcached_quit_server(memcached_server_st *ptr, bool io_death)
{
- if (ptr->fd != -1)
+ if (ptr->fd != INVALID_SOCKET)
{
if (io_death == false && ptr->type != MEMCACHED_CONNECTION_UDP && ptr->options.is_shutting_down == false)
{
}
else
{
- rc= memcached_do(ptr, "quit\r\n", strlen("quit\r\n"), true);
+ rc= memcached_do(ptr, "quit\r\n", sizeof("quit\r\n") -1, true);
}
WATCHPOINT_ASSERT(rc == MEMCACHED_SUCCESS || rc == MEMCACHED_FETCH_NOTFINISHED);
memcached_io_close(ptr);
}
- ptr->fd= -1;
+ ptr->fd= INVALID_SOCKET;
+ ptr->io_bytes_sent= 0;
ptr->write_buffer_offset= (size_t) ((ptr->type == MEMCACHED_CONNECTION_UDP) ? UDP_DATAGRAM_HEADER_LENGTH : 0);
ptr->read_buffer_length= 0;
ptr->read_ptr= ptr->read_buffer;
ptr->options.is_shutting_down= false;
memcached_server_response_reset(ptr);
+ // We reset the version so that if we end up talking to a different server
+ // we don't have stale server version information.
+ ptr->major_version= ptr->minor_version= ptr->micro_version= UINT8_MAX;
+
if (io_death)
{
ptr->server_failure_counter++;
}
}
-void memcached_quit(memcached_st *ptr)
+void send_quit(memcached_st *ptr)
{
- uint32_t x;
+ for (uint32_t x= 0; x < memcached_server_count(ptr); x++)
+ {
+ memcached_server_write_instance_st instance=
+ memcached_server_instance_fetch(ptr, x);
- if (memcached_server_count(ptr) == 0)
- return;
+ memcached_quit_server(instance, false);
+ }
+}
- if (memcached_server_count(ptr))
+void memcached_quit(memcached_st *ptr)
+{
+ if (initialize_query(ptr) != MEMCACHED_SUCCESS)
{
- for (x= 0; x < memcached_server_count(ptr); x++)
- {
- memcached_server_write_instance_st instance=
- memcached_server_instance_fetch(ptr, x);
-
- memcached_quit_server(instance, false);
- }
+ return;
}
+
+ send_quit(ptr);
}