while (length)
{
- uint8_t found_eof= 0;
if (!ptr->read_buffer_length)
{
ssize_t data_read;
}
else
{
- found_eof= 1;
- break;
+ /*
+ EOF. Any data received so far is incomplete
+ so discard it. This always reads by byte in case of TCP
+ 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
+ it will return EGAIN if data is not immediatly available.
+ */
+ memcached_quit_server(ptr, 1);
+ return -1;
}
}
buffer_ptr++;
break;
}
-
- if (found_eof)
- break;
}
return (size_t)(buffer_ptr - (char*)buffer);
return MEMCACHED_SUCCESS;
/* in case of death shutdown to avoid blocking at close() */
- r= shutdown(ptr->fd, SHUT_RDWR);
+ if (1)
+ {
+ r= shutdown(ptr->fd, SHUT_RDWR);
#ifdef HAVE_DEBUG
- if (r && errno != ENOTCONN)
- {
- WATCHPOINT_NUMBER(ptr->fd);
- WATCHPOINT_ERRNO(errno);
- WATCHPOINT_ASSERT(errno);
- }
+ if (r && errno != ENOTCONN)
+ {
+ WATCHPOINT_NUMBER(ptr->fd);
+ WATCHPOINT_ERRNO(errno);
+ WATCHPOINT_ASSERT(errno);
+ }
#endif
+ }
r= close(ptr->fd);
#ifdef HAVE_DEBUG
*/
void memcached_io_reset(memcached_server_st *ptr)
{
- memcached_quit_server(ptr, 0);
+ memcached_quit_server(ptr, 1);
}