From c929d8be5d19f2030406eb5c19f854e672c7a547 Mon Sep 17 00:00:00 2001 From: Matthias Baesken Date: Thu, 5 Jan 2023 08:26:38 +0000 Subject: [PATCH] 8299475: Enhance SocketException by cause where it is missing in net and nio area Reviewed-by: alanb --- .../share/classes/java/net/ServerSocket.java | 2 +- .../share/classes/java/net/Socket.java | 4 +++- .../classes/java/net/SocksSocketImpl.java | 4 ++-- .../classes/sun/nio/ch/NioSocketImpl.java | 23 +++++++++++++++---- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/java.base/share/classes/java/net/ServerSocket.java b/src/java.base/share/classes/java/net/ServerSocket.java index 4d9dde93528..b614d5df106 100644 --- a/src/java.base/share/classes/java/net/ServerSocket.java +++ b/src/java.base/share/classes/java/net/ServerSocket.java @@ -299,7 +299,7 @@ public class ServerSocket implements java.io.Closeable { } catch (SocketException e) { throw e; } catch (IOException e) { - throw new SocketException(e.getMessage()); + throw new SocketException(e.getMessage(), e); } created = true; } diff --git a/src/java.base/share/classes/java/net/Socket.java b/src/java.base/share/classes/java/net/Socket.java index 4b43e5f673b..38f9b6eda11 100644 --- a/src/java.base/share/classes/java/net/Socket.java +++ b/src/java.base/share/classes/java/net/Socket.java @@ -531,8 +531,10 @@ public class Socket implements java.io.Closeable { try { impl.create(stream); created = true; + } catch (SocketException e) { + throw e; } catch (IOException e) { - throw new SocketException(e.getMessage()); + throw new SocketException(e.getMessage(), e); } } diff --git a/src/java.base/share/classes/java/net/SocksSocketImpl.java b/src/java.base/share/classes/java/net/SocksSocketImpl.java index ce8e9a4ca33..9353452efeb 100644 --- a/src/java.base/share/classes/java/net/SocksSocketImpl.java +++ b/src/java.base/share/classes/java/net/SocksSocketImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -363,7 +363,7 @@ class SocksSocketImpl extends DelegatingSocketImpl implements SocksConsts { try { privilegedConnect(server, serverPort, remainingMillis(deadlineMillis)); } catch (IOException e) { - throw new SocketException(e.getMessage()); + throw new SocketException(e.getMessage(), e); } } diff --git a/src/java.base/share/classes/sun/nio/ch/NioSocketImpl.java b/src/java.base/share/classes/sun/nio/ch/NioSocketImpl.java index b2531135b03..bb3ffc00a6e 100644 --- a/src/java.base/share/classes/sun/nio/ch/NioSocketImpl.java +++ b/src/java.base/share/classes/sun/nio/ch/NioSocketImpl.java @@ -312,7 +312,8 @@ public final class NioSocketImpl extends SocketImpl implements PlatformSocketImp connectionReset = true; throw new SocketException("Connection reset"); } catch (IOException ioe) { - throw new SocketException(ioe.getMessage()); + // throw SocketException to maintain compatibility + throw asSocketException(ioe); } finally { endRead(n > 0); } @@ -410,7 +411,8 @@ public final class NioSocketImpl extends SocketImpl implements PlatformSocketImp } catch (InterruptedIOException e) { throw e; } catch (IOException ioe) { - throw new SocketException(ioe.getMessage()); + // throw SocketException to maintain compatibility + throw asSocketException(ioe); } finally { endWrite(n > 0); } @@ -1084,7 +1086,7 @@ public final class NioSocketImpl extends SocketImpl implements PlatformSocketImp } catch (SocketException e) { throw e; } catch (IllegalArgumentException | IOException e) { - throw new SocketException(e.getMessage()); + throw asSocketException(e); } } } @@ -1136,7 +1138,7 @@ public final class NioSocketImpl extends SocketImpl implements PlatformSocketImp } catch (SocketException e) { throw e; } catch (IllegalArgumentException | IOException e) { - throw new SocketException(e.getMessage()); + throw asSocketException(e); } } } @@ -1249,6 +1251,19 @@ public final class NioSocketImpl extends SocketImpl implements PlatformSocketImp return remainingNanos; } + /** + * Creates a SocketException from the given exception. + */ + private static SocketException asSocketException(Exception e) { + if (e instanceof SocketException se) { + return se; + } else { + var se = new SocketException(e.getMessage()); + se.setStackTrace(e.getStackTrace()); + return se; + } + } + /** * Returns the socket protocol family. */