2 Basic socket buffered IO
7 ssize_t
memcached_io_read(memcached_st
*ptr
, unsigned int server_key
,
8 char *buffer
, size_t length
)
12 for (x
= 0; x
< length
; x
++)
14 if (!ptr
->read_buffer_length
)
16 ptr
->read_buffer_length
= recv(ptr
->hosts
[server_key
].fd
,
18 MEMCACHED_MAX_BUFFER
, 0);
19 ptr
->read_ptr
= ptr
->read_buffer
;
21 if (ptr
->read_buffer_length
== -1)
23 if (ptr
->read_buffer_length
== 0)
26 buffer
[x
]= *ptr
->read_ptr
;
28 ptr
->read_buffer_length
--;
34 ssize_t
memcached_io_write(memcached_st
*ptr
, unsigned int server_key
,
35 char *buffer
, size_t length
)
39 for (x
= 0; x
< length
; x
++)
41 ptr
->write_buffer
[ptr
->write_buffer_offset
]= buffer
[x
];
42 ptr
->write_buffer_offset
++;
43 if (ptr
->write_buffer_offset
== MEMCACHED_MAX_BUFFER
)
47 if ((sent_length
= send(ptr
->hosts
[server_key
].fd
, ptr
->write_buffer
,
48 MEMCACHED_MAX_BUFFER
, 0)) == -1)
51 assert(sent_length
== MEMCACHED_MAX_BUFFER
);
52 ptr
->write_between_flush
+= MEMCACHED_MAX_BUFFER
;
54 ptr
->write_buffer_offset
= 0;
61 ssize_t
memcached_io_flush(memcached_st
*ptr
, unsigned int server_key
)
65 if (ptr
->write_buffer_offset
== 0)
68 if ((sent_length
= send(ptr
->hosts
[server_key
].fd
, ptr
->write_buffer
,
69 ptr
->write_buffer_offset
, 0)) == -1)
72 assert(sent_length
== ptr
->write_buffer_offset
);
74 sent_length
+= ptr
->write_between_flush
;
76 ptr
->write_buffer_offset
= 0;
77 ptr
->write_between_flush
= 0;
83 Eventually we will just kill off the server with the problem.
85 void memcached_io_reset(memcached_st
*ptr
, unsigned int server_key
)
87 ptr
->write_buffer_offset
= 0;