8615aa6e13eb38c0433bba15e95fab12a4473ceb
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
)
24 data_read
= recv(ptr
->hosts
[server_key
].fd
,
38 ptr
->read_buffer_length
= recv(ptr
->hosts
[server_key
].fd
,
40 MEMCACHED_MAX_BUFFER
, 0);
41 ptr
->read_ptr
= ptr
->read_buffer
;
44 if (ptr
->read_buffer_length
== -1)
46 if (ptr
->read_buffer_length
== 0)
49 *buffer_ptr
= *ptr
->read_ptr
;
52 ptr
->read_buffer_length
--;
58 ssize_t
memcached_io_write(memcached_st
*ptr
, unsigned int server_key
,
59 char *buffer
, size_t length
)
63 for (x
= 0; x
< length
; x
++)
65 ptr
->write_buffer
[ptr
->write_buffer_offset
]= buffer
[x
];
66 ptr
->write_buffer_offset
++;
67 if (ptr
->write_buffer_offset
== MEMCACHED_MAX_BUFFER
)
71 if ((sent_length
= send(ptr
->hosts
[server_key
].fd
, ptr
->write_buffer
,
72 MEMCACHED_MAX_BUFFER
, 0)) == -1)
75 assert(sent_length
== MEMCACHED_MAX_BUFFER
);
76 ptr
->write_between_flush
+= MEMCACHED_MAX_BUFFER
;
78 ptr
->write_buffer_offset
= 0;
85 ssize_t
memcached_io_flush(memcached_st
*ptr
, unsigned int server_key
)
89 if (ptr
->write_buffer_offset
== 0)
92 if ((sent_length
= send(ptr
->hosts
[server_key
].fd
, ptr
->write_buffer
,
93 ptr
->write_buffer_offset
, 0)) == -1)
96 assert(sent_length
== ptr
->write_buffer_offset
);
98 sent_length
+= ptr
->write_between_flush
;
100 ptr
->write_buffer_offset
= 0;
101 ptr
->write_between_flush
= 0;
107 Eventually we will just kill off the server with the problem.
109 void memcached_io_reset(memcached_st
*ptr
, unsigned int server_key
)
111 ptr
->write_buffer_offset
= 0;