From 70450ce8810dc6a1ecaf27a6a7af5b44685535dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Fri, 12 Apr 2019 09:49:55 +0300 Subject: [PATCH] MXS-2349: Add support for UNIX domain sockets Added core functionality for UNIX domain sockets in servers. Currently the address parameter accepts them both but a separate `socket` parameter is needed. --- server/core/mysql_utils.cc | 19 ++++++++++++++----- .../MySQL/mariadbbackend/mysql_backend.cc | 16 ++++++++++++++-- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/server/core/mysql_utils.cc b/server/core/mysql_utils.cc index 6f57d6b6d..11389a74c 100644 --- a/server/core/mysql_utils.cc +++ b/server/core/mysql_utils.cc @@ -178,13 +178,22 @@ MYSQL* mxs_mysql_real_connect(MYSQL* con, SERVER* server, const char* user, cons } } - MYSQL* mysql = mysql_real_connect(con, server->address, user, passwd, NULL, server->port, NULL, 0); - auto extra_port = mxb::atomic::load(&server->extra_port, mxb::atomic::RELAXED); + MYSQL* mysql = nullptr; - if (!mysql && extra_port > 0) + if (server->address[0] == '/') { - mysql = mysql_real_connect(con, server->address, user, passwd, NULL, extra_port, NULL, 0); - MXS_WARNING("Could not connect with normal port to server '%s', using extra_port", server->name()); + mysql = mysql_real_connect(con, nullptr, user, passwd, nullptr, 0, server->address, 0); + } + else + { + mysql = mysql_real_connect(con, server->address, user, passwd, NULL, server->port, NULL, 0); + auto extra_port = mxb::atomic::load(&server->extra_port, mxb::atomic::RELAXED); + + if (!mysql && extra_port > 0) + { + mysql = mysql_real_connect(con, server->address, user, passwd, NULL, extra_port, NULL, 0); + MXS_WARNING("Could not connect with normal port to server '%s', using extra_port", server->name()); + } } if (mysql) diff --git a/server/modules/protocol/MySQL/mariadbbackend/mysql_backend.cc b/server/modules/protocol/MySQL/mariadbbackend/mysql_backend.cc index 26a5f1508..a36edb12f 100644 --- a/server/modules/protocol/MySQL/mariadbbackend/mysql_backend.cc +++ b/server/modules/protocol/MySQL/mariadbbackend/mysql_backend.cc @@ -261,7 +261,19 @@ static int gw_do_connect_to_backend(char* host, int port, int* fd) int rv = -1; /* prepare for connect */ - int so = open_network_socket(MXS_SOCKET_NETWORK, &serv_addr, host, port); + int so; + size_t sz; + + if (host[0] == '/') + { + so = open_unix_socket(MXS_SOCKET_NETWORK, (struct sockaddr_un*)&serv_addr, host); + sz = sizeof(sockaddr_un); + } + else + { + so = open_network_socket(MXS_SOCKET_NETWORK, &serv_addr, host, port); + sz = sizeof(sockaddr_storage); + } if (so == -1) { @@ -269,7 +281,7 @@ static int gw_do_connect_to_backend(char* host, int port, int* fd) return rv; } - rv = connect(so, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); + rv = connect(so, (struct sockaddr*)&serv_addr, sz); if (rv != 0) {