+ WATCHPOINT_ASSERT(write_length > 0);
+ sent_length= 0;
+ if (ptr->type == MEMCACHED_CONNECTION_UDP)
+ {
+ struct addrinfo *ai;
+
+ ai= ptr->address_info;
+
+ /* Crappy test code */
+ char buffer[HUGE_STRING_LEN + 8];
+ memset(buffer, 0, HUGE_STRING_LEN + 8);
+ memcpy (buffer+8, local_write_ptr, write_length);
+ buffer[0]= 0;
+ buffer[1]= 0;
+ buffer[2]= 0;
+ buffer[3]= 0;
+ buffer[4]= 0;
+ buffer[5]= 1;
+ buffer[6]= 0;
+ buffer[7]= 0;
+ sent_length= sendto(ptr->fd, buffer, write_length + 8, 0,
+ (struct sockaddr *)ai->ai_addr,
+ ai->ai_addrlen);
+ if (sent_length == -1)
+ {
+ WATCHPOINT_ERRNO(errno);
+ WATCHPOINT_ASSERT(0);
+ }
+ sent_length-= 8; /* We remove the header */
+ }
+ else
+ {
+ if ((ssize_t)(sent_length= write(ptr->fd, local_write_ptr,
+ write_length)) == -1)
+ {
+ switch (errno)
+ {
+ case ENOBUFS:
+ continue;
+ case EAGAIN:
+ {
+ memcached_return rc;
+ rc= io_wait(ptr, MEM_WRITE);
+
+ if (rc == MEMCACHED_SUCCESS)
+ continue;
+
+ memcached_quit_server(ptr, 1);
+ return -1;
+ }
+ default:
+ memcached_quit_server(ptr, 1);
+ ptr->cached_errno= errno;
+ *error= MEMCACHED_ERRNO;
+ return -1;
+ }
+ }
+ }