diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/IOBuffer.java b/src/main/java/com/microsoft/sqlserver/jdbc/IOBuffer.java index a7ee9c14d..14c7b0d4a 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/IOBuffer.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/IOBuffer.java @@ -726,8 +726,13 @@ final InetSocketAddress open(String host, int port, int timeoutMillis, boolean u tcpSocket.setKeepAlive(true); setSocketOptions(tcpSocket, this); - // set SO_TIMEOUT int socketTimeout = con.getSocketTimeoutMilliseconds(); + + // socket timeout should be bounded by loginTimeout before connected + if (!con.isConnected()) { + socketTimeout = Math.min(con.timerRemaining(con.timerExpire), socketTimeout); + } + tcpSocket.setSoTimeout(socketTimeout); inputStream = tcpInputStream = new ProxyInputStream(tcpSocket.getInputStream()); diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerConnection.java b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerConnection.java index b525a2b8e..93cc2dec1 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerConnection.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerConnection.java @@ -1745,7 +1745,7 @@ final int getRetryCount() { return connectRetryCount; } - final boolean attachConnId() { + final boolean isConnected() { return state.equals(State.CONNECTED); } diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerException.java b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerException.java index 6721c7b55..7d4fa23f0 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerException.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerException.java @@ -393,7 +393,7 @@ static String generateStateCode(SQLServerConnection con, int errNum, Integer dat * original error string. */ static String checkAndAppendClientConnId(String errMsg, SQLServerConnection conn) { - if (null != conn && conn.attachConnId()) { + if (null != conn && conn.isConnected()) { UUID clientConnId = conn.getClientConIdInternal(); assert null != clientConnId; StringBuilder sb = new StringBuilder(errMsg);