X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fdo.c;fp=libmemcached%2Fdo.c;h=d673f187149413b858014e0b91c67aebe52d2c4c;hb=7c7750f02368b570353ea109f23a0ea26d226e02;hp=0000000000000000000000000000000000000000;hpb=fa11f4a5d1a9c92eda13f8a5aa11dcff542b8815;p=awesomized%2Flibmemcached diff --git a/libmemcached/do.c b/libmemcached/do.c new file mode 100644 index 00000000..d673f187 --- /dev/null +++ b/libmemcached/do.c @@ -0,0 +1,34 @@ +#include "common.h" + +memcached_return_t memcached_do(memcached_server_st *ptr, const void *command, + size_t command_length, uint8_t with_flush) +{ + memcached_return_t rc; + ssize_t sent_length; + + WATCHPOINT_ASSERT(command_length); + WATCHPOINT_ASSERT(command); + + if ((rc= memcached_connect(ptr)) != MEMCACHED_SUCCESS) + { + WATCHPOINT_ERROR(rc); + return rc; + } + + /* + ** Since non buffering ops in UDP mode dont check to make sure they will fit + ** before they start writing, if there is any data in buffer, clear it out, + ** otherwise we might get a partial write. + **/ + if (ptr->type == MEMCACHED_CONNECTION_UDP && with_flush && ptr->write_buffer_offset > UDP_DATAGRAM_HEADER_LENGTH) + memcached_io_write(ptr, NULL, 0, 1); + + sent_length= memcached_io_write(ptr, command, command_length, (char) with_flush); + + if (sent_length == -1 || (size_t)sent_length != command_length) + rc= MEMCACHED_WRITE_FAILURE; + else if ((ptr->root->flags.no_reply) == 0) + memcached_server_response_increment(ptr); + + return rc; +}