return MEMCACHED_FAILURE;
}
- if (ptr->root->send_size)
+ if (ptr->root->flags.tcp_keepalive)
+ {
+ int flag= 1;
+ int error;
+
+ error= setsockopt(ptr->fd, SOL_SOCKET, SO_KEEPALIVE,
+ &flag, (socklen_t)sizeof(int));
+ WATCHPOINT_ASSERT(error == 0);
+ if (error)
+ return MEMCACHED_FAILURE;
+ }
+
+#ifdef TCP_KEEPIDLE
+ if (ptr->root->tcp_keepidle > 0)
+ {
+ int error;
+
+ error= setsockopt(ptr->fd, IPPROTO_TCP, TCP_KEEPIDLE,
+ &ptr->root->tcp_keepidle, (socklen_t)sizeof(int));
+ WATCHPOINT_ASSERT(error == 0);
+ if (error)
+ return MEMCACHED_FAILURE;
+ }
+#endif
+
+ if (ptr->root->send_size > 0)
{
int error;
return MEMCACHED_FAILURE;
}
- if (ptr->root->recv_size)
+ if (ptr->root->recv_size > 0)
{
int error;
}
-memcached_return_t memcached_connect(memcached_server_st *ptr)
+memcached_return_t memcached_connect(memcached_server_write_instance_st ptr)
{
memcached_return_t rc= MEMCACHED_NO_SERVERS;
LIBMEMCACHED_MEMCACHED_CONNECT_START();
if (curr_time.tv_sec < ptr->next_retry)
{
- if (memcached_behavior_get(ptr->root, MEMCACHED_BEHAVIOR_AUTO_EJECT_HOSTS))
+ memcached_st *root= (memcached_st *)ptr->root;
+ // @todo fix this by fixing behavior to no longer make use of
+ // memcached_st
+ if (memcached_behavior_get(root, MEMCACHED_BEHAVIOR_AUTO_EJECT_HOSTS))
{
- run_distribution(ptr->root);
+ run_distribution(root);
}
- ptr->root->last_disconnected_server = ptr;
+ root->last_disconnected_server = ptr;
+
return MEMCACHED_SERVER_MARKED_DEAD;
}
}
WATCHPOINT_ASSERT(0);
}
- unlikely ( rc != MEMCACHED_SUCCESS) ptr->root->last_disconnected_server = ptr;
+ unlikely ( rc != MEMCACHED_SUCCESS)
+ {
+ //@todo create interface around last_discontected_server
+ memcached_st *root= (memcached_st *)ptr->root;
+ root->last_disconnected_server = ptr;
+ }
LIBMEMCACHED_MEMCACHED_CONNECT_END();