From 3fcbe84c5f518e5a8d5bfa4c80df83d65a798e42 Mon Sep 17 00:00:00 2001 From: dreamlike_ocean Date: Sun, 18 Aug 2024 21:36:25 +0800 Subject: [PATCH 1/2] Socket connections now try all possible IP addresses, not just the first one --- .../jdbc/client/impl/ConnectionHelper.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/mariadb/jdbc/client/impl/ConnectionHelper.java b/src/main/java/org/mariadb/jdbc/client/impl/ConnectionHelper.java index ec96f6eca..a0b37a9ff 100644 --- a/src/main/java/org/mariadb/jdbc/client/impl/ConnectionHelper.java +++ b/src/main/java/org/mariadb/jdbc/client/impl/ConnectionHelper.java @@ -5,6 +5,7 @@ import java.io.IOException; import java.lang.reflect.Constructor; +import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; import java.sql.SQLException; @@ -109,11 +110,24 @@ public static Socket connectSocket(final Configuration conf, final HostAddress h socket = createSocket(conf, hostAddress); SocketHelper.setSocketOption(conf, socket); if (!socket.isConnected()) { - InetSocketAddress sockAddr = - hostAddress.pipe == null && hostAddress.localSocket == null - ? new InetSocketAddress(hostAddress.host, hostAddress.port) - : null; - socket.connect(sockAddr, conf.connectTimeout()); + boolean isLocalSocket = hostAddress.pipe == null && hostAddress.localSocket == null; + if (isLocalSocket) { + socket.connect(null, conf.connectTimeout()); + } else { + InetAddress[] allAddress = InetAddress.getAllByName(hostAddress.host); + IOException lastException = null; + for (InetAddress address : allAddress) { + try { + socket.connect(new InetSocketAddress(address, hostAddress.port), conf.connectTimeout()); + break; + }catch (IOException ignore) { + lastException = ignore; + } + } + if (lastException != null) { + throw lastException; + } + } } return socket; From 5d6e7b2f587da1f997d5ed584bba744c301d9a37 Mon Sep 17 00:00:00 2001 From: dreamlike_ocean Date: Sun, 18 Aug 2024 22:24:12 +0800 Subject: [PATCH 2/2] fix remote socket check error --- .../java/org/mariadb/jdbc/client/impl/ConnectionHelper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/mariadb/jdbc/client/impl/ConnectionHelper.java b/src/main/java/org/mariadb/jdbc/client/impl/ConnectionHelper.java index a0b37a9ff..66a7e61ea 100644 --- a/src/main/java/org/mariadb/jdbc/client/impl/ConnectionHelper.java +++ b/src/main/java/org/mariadb/jdbc/client/impl/ConnectionHelper.java @@ -110,8 +110,8 @@ public static Socket connectSocket(final Configuration conf, final HostAddress h socket = createSocket(conf, hostAddress); SocketHelper.setSocketOption(conf, socket); if (!socket.isConnected()) { - boolean isLocalSocket = hostAddress.pipe == null && hostAddress.localSocket == null; - if (isLocalSocket) { + boolean isRemoteSocket = hostAddress.pipe == null && hostAddress.localSocket == null; + if (!isRemoteSocket) { socket.connect(null, conf.connectTimeout()); } else { InetAddress[] allAddress = InetAddress.getAllByName(hostAddress.host);