4 This closes all connections (forces flush of input as well).
6 Maybe add a host specific, or key specific version?
8 The reason we send "quit" is that in case we have buffered IO, this
9 will force data to be completed.
12 void memcached_quit_server(memcached_server_st
*ptr
, uint8_t io_death
)
16 if (io_death
== 0 && ptr
->type
!= MEMCACHED_CONNECTION_UDP
)
18 memcached_return_t rc
;
19 char buffer
[MEMCACHED_MAX_BUFFER
];
21 if (ptr
->root
->flags
.binary_protocol
)
23 protocol_binary_request_quit request
= {.bytes
= {0}};
24 request
.message
.header
.request
.magic
= PROTOCOL_BINARY_REQ
;
25 request
.message
.header
.request
.opcode
= PROTOCOL_BINARY_CMD_QUIT
;
26 request
.message
.header
.request
.datatype
= PROTOCOL_BINARY_RAW_BYTES
;
27 rc
= memcached_do(ptr
, request
.bytes
, sizeof(request
.bytes
), 1);
30 rc
= memcached_do(ptr
, "quit\r\n", 6, 1);
32 WATCHPOINT_ASSERT(rc
== MEMCACHED_SUCCESS
|| rc
== MEMCACHED_FETCH_NOTFINISHED
);
34 /* read until socket is closed, or there is an error
35 * closing the socket before all data is read
36 * results in server throwing away all data which is
40 while (memcached_io_read(ptr
, buffer
, sizeof(buffer
)/sizeof(*buffer
),
41 &nread
) == MEMCACHED_SUCCESS
);
44 * memcached_io_read may call memcached_quit_server with io_death if
45 * it encounters problems, but we don't care about those occurences.
46 * The intention of that loop is to drain the data sent from the
47 * server to ensure that the server processed all of the data we
50 ptr
->server_failure_counter
= 0;
52 memcached_io_close(ptr
);
55 ptr
->write_buffer_offset
= (size_t) ((ptr
->type
== MEMCACHED_CONNECTION_UDP
) ? UDP_DATAGRAM_HEADER_LENGTH
: 0);
56 ptr
->read_buffer_length
= 0;
57 ptr
->read_ptr
= ptr
->read_buffer
;
58 memcached_server_response_reset(ptr
);
61 if(io_death
) ptr
->server_failure_counter
++;
64 void memcached_quit(memcached_st
*ptr
)
68 if (ptr
->hosts
== NULL
||
69 ptr
->number_of_hosts
== 0)
72 if (ptr
->hosts
&& ptr
->number_of_hosts
)
74 for (x
= 0; x
< ptr
->number_of_hosts
; x
++)
75 memcached_quit_server(&ptr
->hosts
[x
], 0);