#include <libmemcached/common.h>
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+
void initialize_binary_request(org::libmemcached::Instance* server, protocol_binary_request_header& header)
{
server->request_id++;
do {
/* Just try a single read to grab what's available */
ssize_t nr;
- if ((nr= recv(ptr->fd,
+ if ((nr= ::recv(ptr->fd,
ptr->read_ptr + ptr->read_data_length,
MEMCACHED_MAX_BUFFER - ptr->read_data_length,
- MSG_DONTWAIT)) <= 0)
+ MSG_NOSIGNAL)) <= 0)
{
if (nr == 0)
{
int local_errno= EINVAL;
int err;
socklen_t len= sizeof (err);
- if (getsockopt(ptr->fd, SOL_SOCKET, SO_ERROR, &err, &len) == 0)
+ if (getsockopt(ptr->fd, SOL_SOCKET, SO_ERROR, (char*)&err, &len) == 0)
{
if (err == 0) // treat this as EINTR
{
int flags;
if (with_flush)
{
- flags= MSG_NOSIGNAL|MSG_DONTWAIT;
+ flags= MSG_NOSIGNAL;
}
else
{
- flags= MSG_NOSIGNAL|MSG_DONTWAIT|MSG_MORE;
+ flags= MSG_NOSIGNAL|MSG_MORE;
}
ssize_t sent_length= ::send(ptr->fd, local_write_ptr, write_length, flags);
ssize_t data_read;
do
{
- data_read= ::recv(ptr->fd, ptr->read_buffer, MEMCACHED_MAX_BUFFER, MSG_DONTWAIT);
+ data_read= ::recv(ptr->fd, ptr->read_buffer, MEMCACHED_MAX_BUFFER, MSG_NOSIGNAL);
if (data_read == SOCKET_ERROR)
{
switch (get_socket_errno())
char buffer[MEMCACHED_MAX_BUFFER];
do
{
- data_read= recv(ptr->fd, ptr->read_buffer, sizeof(buffer), MSG_DONTWAIT);
+ data_read= ::recv(ptr->fd, ptr->read_buffer, sizeof(buffer), MSG_NOSIGNAL);
if (data_read == SOCKET_ERROR)
{
switch (get_socket_errno())
}
/* in case of death shutdown to avoid blocking at close() */
- if (shutdown(ptr->fd, SHUT_RDWR) == SOCKET_ERROR && get_socket_errno() != ENOTCONN)
+ if (shutdown(ptr->fd, SHUT_RDWR) == SOCKET_ERROR and get_socket_errno() != ENOTCONN)
{
WATCHPOINT_NUMBER(ptr->fd);
WATCHPOINT_ERRNO(get_socket_errno());
ptr->fd= INVALID_SOCKET;
}
-org::libmemcached::Instance* memcached_io_get_readable_server(memcached_st *memc)
+org::libmemcached::Instance* memcached_io_get_readable_server(memcached_st *memc, memcached_return_t&)
{
#define MAX_SERVERS_TO_POLL 100
struct pollfd fds[MAX_SERVERS_TO_POLL];
return instance;
}
- if (memcached_instance_response_count(instance) > 0)
+ if (instance->response_count() > 0)
{
fds[host_index].events= POLLIN;
fds[host_index].revents= 0;
{
org::libmemcached::Instance* instance= memcached_instance_fetch(memc, x);
- if (memcached_instance_response_count(instance) > 0)
+ if (instance->response_count() > 0)
{
return instance;
}