2 * Copyright (C) 2006-2010 Brian Aker
5 * Use and distribution licensed under the BSD license. See
6 * the COPYING file in the parent directory for full text.
14 memcached_return_t
memcached_do(memcached_server_write_instance_st ptr
, const void *command
,
15 size_t command_length
, bool with_flush
)
17 memcached_return_t rc
;
20 WATCHPOINT_ASSERT(command_length
);
21 WATCHPOINT_ASSERT(command
);
23 if ((rc
= memcached_connect(ptr
)) != MEMCACHED_SUCCESS
)
30 ** Since non buffering ops in UDP mode dont check to make sure they will fit
31 ** before they start writing, if there is any data in buffer, clear it out,
32 ** otherwise we might get a partial write.
34 if (ptr
->type
== MEMCACHED_CONNECTION_UDP
&& with_flush
&& ptr
->write_buffer_offset
> UDP_DATAGRAM_HEADER_LENGTH
)
36 memcached_io_write(ptr
, NULL
, 0, true);
39 sent_length
= memcached_io_write(ptr
, command
, command_length
, with_flush
);
41 if (sent_length
== -1 || (size_t)sent_length
!= command_length
)
43 rc
= MEMCACHED_WRITE_FAILURE
;
45 else if ((ptr
->root
->flags
.no_reply
) == 0)
47 memcached_server_response_increment(ptr
);
53 memcached_return_t
memcached_vdo(memcached_server_write_instance_st ptr
,
54 const struct __write_vector_st
*vector
, size_t count
,
57 memcached_return_t rc
;
60 WATCHPOINT_ASSERT(count
);
61 WATCHPOINT_ASSERT(vector
);
63 if ((rc
= memcached_connect(ptr
)) != MEMCACHED_SUCCESS
)
70 ** Since non buffering ops in UDP mode dont check to make sure they will fit
71 ** before they start writing, if there is any data in buffer, clear it out,
72 ** otherwise we might get a partial write.
74 if (ptr
->type
== MEMCACHED_CONNECTION_UDP
&& with_flush
&& ptr
->write_buffer_offset
> UDP_DATAGRAM_HEADER_LENGTH
)
76 memcached_io_write(ptr
, NULL
, 0, true);
79 sent_length
= memcached_io_writev(ptr
, vector
, count
, with_flush
);
81 size_t command_length
= 0;
82 for (uint32_t x
= 0; x
< count
; ++x
, vector
++)
84 command_length
+= vector
->length
;
87 if (sent_length
== -1 || (size_t)sent_length
!= command_length
)
89 rc
= MEMCACHED_WRITE_FAILURE
;
91 WATCHPOINT_ERRNO(errno
);
93 else if ((ptr
->root
->flags
.no_reply
) == 0)
95 memcached_server_response_increment(ptr
);