2 Basic socket buffered IO
7 ssize_t
memcached_io_read(memcached_st
*ptr
, unsigned int server_key
,
8 char *buffer
, size_t length
)
15 for (x
= 0, buffer_ptr
= buffer
;
18 if (!ptr
->read_buffer_length
)
20 ptr
->read_buffer_length
= recv(ptr
->hosts
[server_key
].fd
,
22 MEMCACHED_MAX_BUFFER
, 0);
23 ptr
->read_ptr
= ptr
->read_buffer
;
25 if (ptr
->read_buffer_length
== -1)
27 if (ptr
->read_buffer_length
== 0)
30 *buffer_ptr
= *ptr
->read_ptr
;
33 ptr
->read_buffer_length
--;
39 ssize_t
memcached_io_write(memcached_st
*ptr
, unsigned int server_key
,
40 char *buffer
, size_t length
)
44 for (x
= 0; x
< length
; x
++)
46 ptr
->write_buffer
[ptr
->write_buffer_offset
]= buffer
[x
];
47 ptr
->write_buffer_offset
++;
48 if (ptr
->write_buffer_offset
== MEMCACHED_MAX_BUFFER
)
52 if ((sent_length
= send(ptr
->hosts
[server_key
].fd
, ptr
->write_buffer
,
53 MEMCACHED_MAX_BUFFER
, 0)) == -1)
56 assert(sent_length
== MEMCACHED_MAX_BUFFER
);
57 ptr
->write_between_flush
+= MEMCACHED_MAX_BUFFER
;
59 ptr
->write_buffer_offset
= 0;
66 ssize_t
memcached_io_flush(memcached_st
*ptr
, unsigned int server_key
)
70 if (ptr
->write_buffer_offset
== 0)
73 if ((sent_length
= send(ptr
->hosts
[server_key
].fd
, ptr
->write_buffer
,
74 ptr
->write_buffer_offset
, 0)) == -1)
77 assert(sent_length
== ptr
->write_buffer_offset
);
79 sent_length
+= ptr
->write_between_flush
;
81 ptr
->write_buffer_offset
= 0;
82 ptr
->write_between_flush
= 0;
88 Eventually we will just kill off the server with the problem.
90 void memcached_io_reset(memcached_st
*ptr
, unsigned int server_key
)
92 ptr
->write_buffer_offset
= 0;