X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=libmemcached%2Fio.c;h=2515dc1ea7c72b5f5e2a42404d3aa11f23233c4f;hb=d9752c25d2f723d27e355d0c7090b65b0445c4a4;hp=9f38af5c213d51d6cc4b57e781b537ded58000dd;hpb=0f7a6d1cbcff19e7a48d18605b7d070758f34776;p=m6w6%2Flibmemcached diff --git a/libmemcached/io.c b/libmemcached/io.c index 9f38af5c..2515dc1e 100644 --- a/libmemcached/io.c +++ b/libmemcached/io.c @@ -105,6 +105,11 @@ static memcached_return_t io_wait(memcached_server_write_instance_st ptr, return MEMCACHED_FAILURE; } +memcached_return_t memcached_io_wait_for_write(memcached_server_write_instance_st ptr) +{ + return io_wait(ptr, MEM_WRITE); +} + /** * Try to fill the input buffer for a server with as much * data as possible. @@ -309,7 +314,7 @@ memcached_return_t memcached_io_read(memcached_server_write_instance_st ptr, and protocol enforcement happens at memcached_response() looking for '\n'. We do not care for UDB which requests 8 bytes at once. Generally, this means that connection went away. Since - for blocking I/O we do not return 0 and for non-blocking case + for blocking I/O we do not return EXIT_SUCCESS and for non-blocking case it will return EGAIN if data is not immediatly available. */ WATCHPOINT_STRING("We had a zero length recv()"); @@ -595,7 +600,7 @@ static ssize_t io_flush(memcached_server_write_instance_st ptr, if (ptr->write_buffer_offset == 0 || (ptr->type == MEMCACHED_CONNECTION_UDP && ptr->write_buffer_offset == UDP_DATAGRAM_HEADER_LENGTH)) - return 0; + return EXIT_SUCCESS; /* Looking for memory overflows */ #if defined(DEBUG) @@ -614,7 +619,7 @@ static ssize_t io_flush(memcached_server_write_instance_st ptr, increment_udp_message_id(ptr); WATCHPOINT_ASSERT(ptr->fd != -1); - sent_length= send(ptr->fd, local_write_ptr, write_length, 0); + sent_length= send(ptr->fd, local_write_ptr, write_length, MSG_NOSIGNAL|MSG_DONTWAIT); if (sent_length == SOCKET_ERROR) { ptr->cached_errno= get_socket_errno();