From be43782cf28a8c2dc72916e183c4bc04b60c9a73 Mon Sep 17 00:00:00 2001 From: Geoffrey Kizer Date: Tue, 11 Aug 2020 09:51:25 -0700 Subject: [PATCH 1/2] fix error mapping in HttpWebRequest to handle NetworkException --- .../System/Net/Http/SocketsHttpHandler/ConnectHelper.cs | 9 +++++++++ .../System.Net.Requests/src/System/Net/WebException.cs | 9 ++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/ConnectHelper.cs b/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/ConnectHelper.cs index 467e813c49ac58..97ec60c5c7cd2e 100644 --- a/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/ConnectHelper.cs +++ b/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/ConnectHelper.cs @@ -61,6 +61,15 @@ public static Connection Connect(string host, int port, CancellationToken cancel socket.Connect(new DnsEndPoint(host, port)); } } + catch (SocketException se) + { + socket.Dispose(); + + // SocketConnectionFactory wraps SocketException in NetworkException. Do the same here. + NetworkException ne = NetworkErrorHelper.MapSocketException(se); + + throw CreateWrappedException(ne, host, port, cancellationToken); + } catch (Exception e) { socket.Dispose(); diff --git a/src/libraries/System.Net.Requests/src/System/Net/WebException.cs b/src/libraries/System.Net.Requests/src/System/Net/WebException.cs index 0f211d7418bd22..9810108b83484c 100644 --- a/src/libraries/System.Net.Requests/src/System/Net/WebException.cs +++ b/src/libraries/System.Net.Requests/src/System/Net/WebException.cs @@ -96,18 +96,17 @@ internal static Exception CreateCompatibleException(Exception exception) private static WebExceptionStatus GetStatusFromExceptionHelper(HttpRequestException ex) { - SocketException? socketEx = ex.InnerException as SocketException; + NetworkException? networkException = ex.InnerException as NetworkException; - if (socketEx is null) + if (networkException is null) { return WebExceptionStatus.UnknownError; } WebExceptionStatus status; - switch (socketEx.SocketErrorCode) + switch (networkException.NetworkError) { - case SocketError.NoData: - case SocketError.HostNotFound: + case NetworkError.HostNotFound: status = WebExceptionStatus.NameResolutionFailure; break; default: From 75d7f7735d79c195773010fef7e9b2fa4a0238b1 Mon Sep 17 00:00:00 2001 From: Geoffrey Kizer Date: Tue, 11 Aug 2020 12:14:32 -0700 Subject: [PATCH 2/2] add mapping for SocketError.NoData => NetworkError.HostNotFound --- src/libraries/Common/src/System/Net/NetworkErrorHelper.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libraries/Common/src/System/Net/NetworkErrorHelper.cs b/src/libraries/Common/src/System/Net/NetworkErrorHelper.cs index e305163ed8fe1d..2e66b7f7a69ee9 100644 --- a/src/libraries/Common/src/System/Net/NetworkErrorHelper.cs +++ b/src/libraries/Common/src/System/Net/NetworkErrorHelper.cs @@ -13,6 +13,7 @@ internal static NetworkException MapSocketException(SocketException socketExcept { SocketError.AddressAlreadyInUse => NetworkError.EndPointInUse, SocketError.HostNotFound => NetworkError.HostNotFound, + SocketError.NoData => NetworkError.HostNotFound, SocketError.ConnectionRefused => NetworkError.ConnectionRefused, SocketError.OperationAborted => NetworkError.OperationAborted, SocketError.ConnectionAborted => NetworkError.ConnectionAborted,