+ sent_length= 0;
+ if (ptr->hosts[server_key].type == MEMCACHED_CONNECTION_UDP)
+ {
+ sent_length= sendto(ptr->hosts[server_key].fd,
+ write_ptr, write_length, 0,
+ (struct sockaddr *)&ptr->hosts[server_key].address_info->ai_addr,
+ sizeof(struct sockaddr));
+ }
+ else
+ {
+ if ((ssize_t)(sent_length= write(ptr->hosts[server_key].fd, write_ptr,
+ write_length)) == -1)
+ {
+ switch (errno)
+ {
+ case ENOBUFS:
+ continue;
+ case EAGAIN:
+ {
+ memcached_return rc;
+ rc= io_wait(ptr, server_key, MEM_WRITE);
+
+ if (rc == MEMCACHED_SUCCESS)
+ continue;
+
+ memcached_quit_server(ptr, server_key, 1);
+ return -1;
+ }
+ default:
+ memcached_quit_server(ptr, server_key, 1);
+ ptr->cached_errno= errno;
+ *error= MEMCACHED_ERRNO;
+ return -1;
+ }
+ }
+ }