+ switch (error)
+ {
+ case 1: // Success!
+ WATCHPOINT_IF_LABELED_NUMBER(read_or_write && loop_max < 4, "read() times we had to loop, decremented down from 5", loop_max);
+ WATCHPOINT_IF_LABELED_NUMBER(!read_or_write && loop_max < 4, "write() times we had to loop, decremented down from 5", loop_max);
+
+ return MEMCACHED_SUCCESS;
+ case 0: // Timeout occured, we let the while() loop do its thing.
+ return MEMCACHED_TIMEOUT;
+ default:
+ WATCHPOINT_ERRNO(get_socket_errno());
+ switch (get_socket_errno())
+ {
+#ifdef TARGET_OS_LINUX
+ case ERESTART:
+#endif
+ case EINTR:
+ break;
+ default:
+ if (fds.revents & POLLERR)
+ {
+ int err;
+ socklen_t len= sizeof (err);
+ (void)getsockopt(ptr->fd, SOL_SOCKET, SO_ERROR, &err, &len);
+ ptr->cached_errno= (err == 0) ? get_socket_errno() : err;
+ }
+ else
+ {
+ ptr->cached_errno= get_socket_errno();
+ }
+ memcached_quit_server(ptr, true);