uint16_t flags,
memcached_storage_action verb)
{
+ char to_write;
size_t write_length;
ssize_t sent_length;
memcached_return rc;
char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
unsigned int server_key;
- assert(value);
- assert(value_length);
+ WATCHPOINT_ASSERT(value);
+ WATCHPOINT_ASSERT(value_length);
- memset(buffer, 0, MEMCACHED_DEFAULT_COMMAND_SIZE);
-
- /* Leaving this assert in since only a library fubar could blow this */
- if (ptr->write_buffer_offset != 0)
- {
- WATCHPOINT_NUMBER(ptr->write_buffer_offset);
- }
+ /* Leaving this WATCHPOINT_ASSERT in since only a library fubar could blow this */
+#ifdef NOT_DONE
+ if (!(ptr->flags & MEM_NO_BLOCK) && ptr->write_buffer_offset != 0)
+ WATCHPOINT_ASSERT(0);
+#endif
- assert(ptr->write_buffer_offset == 0);
-
server_key= memcached_generate_hash(ptr, key, key_length);
rc= memcached_connect(ptr, server_key);
We have to flush after sending the command. Memcached is not smart enough
to just keep reading from the socket :(
*/
- if ((sent_length= memcached_io_write(ptr, server_key, buffer, write_length, 1)) == -1)
+ if ((sent_length= memcached_io_write(ptr, server_key, buffer, write_length, 0)) == -1)
{
rc= MEMCACHED_WRITE_FAILURE;
goto error;
goto error;
}
- if ((sent_length= memcached_io_write(ptr, server_key, "\r\n", 2, 1)) == -1)
+ if ((ptr->flags & MEM_NO_BLOCK) && verb == SET_OP)
+ to_write= 0;
+ else
+ to_write= 1;
+
+ if ((sent_length= memcached_io_write(ptr, server_key, "\r\n", 2, to_write)) == -1)
{
memcached_quit_server(ptr, server_key);
rc= MEMCACHED_WRITE_FAILURE;