111 if (revents & POLLOUT && !(con->
events & POLLOUT) &&
123 con->
events&= (short)~revents;
238 const char *password)
248 if (password == NULL)
309 major= (uint32_t)strtoul(current, &end, 10);
311 minor= (uint32_t)strtoul(current, &end, 10);
313 version= (uint32_t)strtoul(current, &end, 10);
315 return (major * 10000) + (minor * 100) + version;
394 db, strlen(db), strlen(db), ret_ptr);
445 const void *data,
size_t size,
454 "connection not ready");
535 uint8_t protocol_version)
541 const char *server_version)
543 if (server_version == NULL)
560 if (scramble == NULL)
586 uint32_t max_packet_size)
608 size_t *size,
size_t *total,
638 uint8_t *command_data;
647 if (command_data == NULL)
666 while ((offset + size) != (*total))
678 command_data[*total]= 0;
718 char port[NI_MAXSERV];
736 snprintf(port, NI_MAXSERV,
"%u", tcp->
port);
742 memset(&ai, 0,
sizeof(
struct addrinfo));
743 ai.ai_socktype= SOCK_STREAM;
744 ai.ai_protocol= IPPROTO_TCP;
748 ai.ai_flags = AI_PASSIVE;
749 ai.ai_family = AF_UNSPEC;
754 if (tcp->
host == NULL)
760 ret= getaddrinfo(host, port, &ai, &(tcp->
addrinfo));
764 "getaddrinfo:%s", gai_strerror(ret));
793 (void)close(con->
fd);
800 "could not connect");
836 if (errno == EAGAIN || errno == EINTR)
839 if (errno == EINPROGRESS)
846 if (errno == ECONNREFUSED || errno == ENETUNREACH || errno == ETIMEDOUT)
875 else if (con->
revents & (POLLERR | POLLHUP | POLLNVAL))
925 "lost connection to server (EOF)");
928 else if (read_size == -1)
945 else if (errno == ECONNREFUSED)
953 else if (errno == EINTR)
955 else if (errno == EPIPE || errno == ECONNRESET)
958 "lost connection to server (%d)", errno);
992 "lost connection to server (EOF)");
995 else if (write_size == -1)
1012 else if (errno == EINTR)
1014 else if (errno == EPIPE || errno == ECONNRESET)
1017 "lost connection to server (%d)", errno);
1040 char host[NI_MAXHOST];
1041 char port[NI_MAXSERV];
1052 NI_MAXSERV, NI_NUMERICHOST | NI_NUMERICSERV);
1072 ret= setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt,
sizeof(opt));
1086 if (errno == EADDRINUSE)
1100 if (listen(fd, con->
backlog) == -1)
1116 if (new_con == NULL)
1151 struct linger linger;
1152 struct timeval waittime;
1155 ret= setsockopt(con->
fd, IPPROTO_TCP, TCP_NODELAY, &ret,
1156 (socklen_t)
sizeof(
int));
1157 if (ret == -1 && errno != EOPNOTSUPP)
1160 "setsockopt:TCP_NODELAY:%d", errno);
1166 ret= setsockopt(con->
fd, SOL_SOCKET, SO_LINGER, &linger,
1167 (socklen_t)
sizeof(
struct linger));
1171 "setsockopt:SO_LINGER:%d", errno);
1176 waittime.tv_usec= 0;
1177 ret= setsockopt(con->
fd, SOL_SOCKET, SO_SNDTIMEO, &waittime,
1178 (socklen_t)
sizeof(
struct timeval));
1179 if (ret == -1 && errno != ENOPROTOOPT)
1182 "setsockopt:SO_SNDTIMEO:%d", errno);
1186 ret= setsockopt(con->
fd, SOL_SOCKET, SO_RCVTIMEO, &waittime,
1187 (socklen_t)
sizeof(
struct timeval));
1188 if (ret == -1 && errno != ENOPROTOOPT)
1191 "setsockopt:SO_RCVTIMEO:%d", errno);
1196 ret= setsockopt(con->
fd, SOL_SOCKET, SO_SNDBUF, &ret, (socklen_t)
sizeof(
int));
1200 "setsockopt:SO_SNDBUF:%d", errno);
1205 ret= setsockopt(con->
fd, SOL_SOCKET, SO_RCVBUF, &ret, (socklen_t)
sizeof(
int));
1209 "setsockopt:SO_RCVBUF:%d", errno);
1213 ret= fcntl(con->
fd, F_GETFL, 0);
1221 ret= fcntl(con->
fd, F_SETFL, ret | O_NONBLOCK);
@ DRIZZLE_COMMAND_SHUTDOWN
@ DRIZZLE_COMMAND_INIT_DB
drizzle_result_st * drizzle_con_shutdown(drizzle_con_st *con, drizzle_result_st *result, drizzle_return_t *ret_ptr)
drizzle_result_st * drizzle_select_db(drizzle_con_st *con, drizzle_result_st *result, const char *db, drizzle_return_t *ret_ptr)
drizzle_result_st * drizzle_shutdown(drizzle_con_st *con, drizzle_result_st *result, uint32_t level, drizzle_return_t *ret_ptr)
drizzle_return_t drizzle_con_connect(drizzle_con_st *con)
drizzle_result_st * drizzle_ping(drizzle_con_st *con, drizzle_result_st *result, drizzle_return_t *ret_ptr)
drizzle_result_st * drizzle_con_select_db(drizzle_con_st *con, drizzle_result_st *result, const char *db, drizzle_return_t *ret_ptr)
drizzle_result_st * drizzle_con_quit(drizzle_con_st *con, drizzle_result_st *result, drizzle_return_t *ret_ptr)
drizzle_result_st * drizzle_quit(drizzle_con_st *con, drizzle_result_st *result, drizzle_return_t *ret_ptr)
drizzle_result_st * drizzle_con_ping(drizzle_con_st *con, drizzle_result_st *result, drizzle_return_t *ret_ptr)
drizzle_result_st * drizzle_con_command_write(drizzle_con_st *con, drizzle_result_st *result, drizzle_command_t command, const void *data, size_t size, size_t total, drizzle_return_t *ret_ptr)
void drizzle_con_reset_addrinfo(drizzle_con_st *con)
static void drizzle_state_reset(drizzle_con_st *con)
static void drizzle_state_pop(drizzle_con_st *con)
static void drizzle_state_push(drizzle_con_st *con, drizzle_state_fn *function)
static bool drizzle_state_none(drizzle_con_st *con)
void drizzle_con_copy_handshake(drizzle_con_st *con, drizzle_con_st *from)
void drizzle_con_set_status(drizzle_con_st *con, drizzle_con_status_t status)
void drizzle_con_set_server_version(drizzle_con_st *con, const char *server_version)
int drizzle_con_backlog(const drizzle_con_st *con)
void drizzle_con_set_scramble(drizzle_con_st *con, const uint8_t *scramble)
drizzle_return_t drizzle_con_listen(drizzle_con_st *con)
void drizzle_con_set_max_packet_size(drizzle_con_st *con, uint32_t max_packet_size)
void drizzle_con_set_capabilities(drizzle_con_st *con, drizzle_capabilities_t capabilities)
void drizzle_con_set_charset(drizzle_con_st *con, drizzle_charset_t charset)
void * drizzle_con_command_read(drizzle_con_st *con, drizzle_command_t *command, size_t *offset, size_t *size, size_t *total, drizzle_return_t *ret_ptr)
void * drizzle_con_command_buffer(drizzle_con_st *con, drizzle_command_t *command, size_t *total, drizzle_return_t *ret_ptr)
void drizzle_con_set_thread_id(drizzle_con_st *con, uint32_t thread_id)
void drizzle_con_set_backlog(drizzle_con_st *con, int backlog)
void drizzle_con_set_protocol_version(drizzle_con_st *con, uint8_t protocol_version)
static drizzle_return_t _con_setsockopt(drizzle_con_st *con)
void drizzle_con_set_options(drizzle_con_st *con, drizzle_con_options_t options)
drizzle_con_options_t drizzle_con_options(const drizzle_con_st *con)
in_port_t drizzle_con_port(const drizzle_con_st *con)
void drizzle_con_remove_options(drizzle_con_st *con, drizzle_con_options_t options)
int drizzle_con_errno(const drizzle_con_st *con)
const uint8_t * drizzle_con_scramble(const drizzle_con_st *con)
uint8_t drizzle_con_protocol_version(const drizzle_con_st *con)
const char * drizzle_con_password(const drizzle_con_st *con)
drizzle_st * drizzle_con_drizzle(const drizzle_con_st *con)
void drizzle_con_set_context(drizzle_con_st *con, void *context)
uint32_t drizzle_con_server_version_number(const drizzle_con_st *con)
uint32_t drizzle_con_max_packet_size(const drizzle_con_st *con)
uint32_t drizzle_con_thread_id(const drizzle_con_st *con)
void drizzle_con_set_db(drizzle_con_st *con, const char *db)
const char * drizzle_con_sqlstate(const drizzle_con_st *con)
drizzle_capabilities_t drizzle_con_capabilities(const drizzle_con_st *con)
drizzle_return_t drizzle_con_set_events(drizzle_con_st *con, short events)
int drizzle_con_fd(const drizzle_con_st *con)
uint16_t drizzle_con_error_code(const drizzle_con_st *con)
void * drizzle_con_context(const drizzle_con_st *con)
drizzle_return_t drizzle_con_set_revents(drizzle_con_st *con, short revents)
drizzle_return_t drizzle_con_set_fd(drizzle_con_st *con, int fd)
void drizzle_con_set_tcp(drizzle_con_st *con, const char *host, in_port_t port)
const char * drizzle_con_error(const drizzle_con_st *con)
drizzle_charset_t drizzle_con_charset(const drizzle_con_st *con)
void drizzle_con_close(drizzle_con_st *con)
const char * drizzle_con_db(const drizzle_con_st *con)
const char * drizzle_con_user(const drizzle_con_st *con)
const char * drizzle_con_host(const drizzle_con_st *con)
drizzle_con_status_t drizzle_con_status(const drizzle_con_st *con)
void drizzle_con_set_auth(drizzle_con_st *con, const char *user, const char *password)
void drizzle_con_add_options(drizzle_con_st *con, drizzle_con_options_t options)
const char * drizzle_con_server_version(const drizzle_con_st *con)
void drizzle_con_set_context_free_fn(drizzle_con_st *con, drizzle_con_context_free_fn *function)
@ DRIZZLE_CON_NO_RESULT_READ
@ DRIZZLE_CON_EXPERIMENTAL
#define DRIZZLE_MAX_USER_SIZE
#define DRIZZLE_MAX_BUFFER_SIZE
#define DRIZZLE_DEFAULT_TCP_PORT
#define DRIZZLE_DEFAULT_TCP_PORT_MYSQL
#define DRIZZLE_MAX_PASSWORD_SIZE
#define DRIZZLE_DEFAULT_SOCKET_SEND_SIZE
#define DRIZZLE_MAX_SCRAMBLE_SIZE
#define DRIZZLE_MAX_DB_SIZE
#define DRIZZLE_DEFAULT_SOCKET_TIMEOUT
#define DRIZZLE_MAX_SERVER_VERSION_SIZE
#define DRIZZLE_DEFAULT_SOCKET_RECV_SIZE
#define DRIZZLE_DEFAULT_TCP_HOST
@ DRIZZLE_RETURN_ERROR_CODE
@ DRIZZLE_RETURN_LOST_CONNECTION
@ DRIZZLE_RETURN_COULD_NOT_CONNECT
@ DRIZZLE_RETURN_NOT_READY
@ DRIZZLE_RETURN_GETADDRINFO
static void drizzle_log_debug(drizzle_st *drizzle, const char *format,...)
static void drizzle_log_crazy(drizzle_st *drizzle, const char *format,...)
void drizzle_set_error(drizzle_st *drizzle, const char *function, const char *format,...)
static void drizzle_log_info(drizzle_st *drizzle, const char *format,...)
drizzle_result_st * drizzle_result_create(drizzle_con_st *con, drizzle_result_st *result)
void drizzle_result_free(drizzle_result_st *result)
drizzle_return_t drizzle_state_packet_read(drizzle_con_st *con)
drizzle_return_t drizzle_state_write(drizzle_con_st *con)
drizzle_return_t drizzle_state_addrinfo(drizzle_con_st *con)
drizzle_return_t drizzle_state_command_read(drizzle_con_st *con)
drizzle_return_t drizzle_state_read(drizzle_con_st *con)
drizzle_return_t drizzle_state_connecting(drizzle_con_st *con)
drizzle_return_t drizzle_state_command_write(drizzle_con_st *con)
drizzle_return_t drizzle_state_handshake_server_read(drizzle_con_st *con)
drizzle_return_t drizzle_state_listen(drizzle_con_st *con)
drizzle_return_t drizzle_state_connect(drizzle_con_st *con)
drizzle_return_t drizzle_state_loop(drizzle_con_st *con)
void drizzle_con_context_free_fn(drizzle_con_st *con, void *context)
uint8_t drizzle_charset_t
drizzle_con_st * drizzle_con_clone(drizzle_st *drizzle, drizzle_con_st *con, const drizzle_con_st *from)
const char * drizzle_error(const drizzle_st *drizzle)
int drizzle_errno(const drizzle_st *drizzle)
const char * drizzle_sqlstate(const drizzle_st *drizzle)
uint16_t drizzle_error_code(const drizzle_st *drizzle)
drizzle_return_t drizzle_con_wait(drizzle_st *drizzle)
void drizzle_con_free(drizzle_con_st *con)
uint8_t buffer[DRIZZLE_MAX_BUFFER_SIZE]
drizzle_capabilities_t capabilities
drizzle_result_st * result
struct addrinfo * addrinfo_next
drizzle_charset_t charset
drizzle_con_options_t options
union drizzle_con_st::@0 socket
drizzle_con_status_t status
char server_version[DRIZZLE_MAX_SERVER_VERSION_SIZE]
drizzle_con_context_free_fn * context_free_fn
drizzle_con_socket_t socket_type
char db[DRIZZLE_MAX_DB_SIZE]
char password[DRIZZLE_MAX_PASSWORD_SIZE]
drizzle_command_t command
char user[DRIZZLE_MAX_USER_SIZE]
uint8_t scramble_buffer[DRIZZLE_MAX_SCRAMBLE_SIZE]
char host_buffer[NI_MAXHOST]
struct addrinfo * addrinfo
drizzle_options_t options
void * event_watch_context
drizzle_event_watch_fn * event_watch_fn