Skip to content

Unhandled Exception when domain name cannot be resolved [v4.0.2] #422

@YetAnotherGeorge

Description

@YetAnotherGeorge

Hello,

I think this line can throw unhandled exceptions because it is never awaited and it has a throw in its catch block.

Commit

When the server is offline and i attempt a connection, i get:

[2026-03-27 17:01:50.2954] [georg] [Fatal] [WPFApp] Unobserved task exception SocketIOClient.Exceptions.ConnectionException: Cannot connect to server 'SOME_SERVER_URL'
 ---> SocketIOClient.Session.ConnectionFailedException: Failed to connect to the server
 ---> System.Net.Http.HttpRequestException: No such host is known. (SOME_SERVER_URL)
 ---> System.Net.Sockets.SocketException (11001): No such host is known.
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
   at System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(String host, Int32 port, HttpRequestMessage initialRequest, Boolean async, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(String host, Int32 port, HttpRequestMessage initialRequest, Boolean async, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.InjectNewHttp11ConnectionAsync(QueueItem queueItem)
   at System.Threading.Tasks.TaskCompletionSourceWithCancellation`1.WaitWithCancellationAsync(CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
   at System.Net.Http.SocketsHttpHandler.<SendAsync>g__CreateHandlerAndSendAsync|115_0(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
   at SocketIOClient.Protocol.Http.SystemHttpClient.SendAsync(HttpRequest req, CancellationToken cancellationToken)
   at SocketIOClient.Protocol.Http.HttpAdapter.SendAsync(HttpRequest req, CancellationToken cancellationToken)
   at SocketIOClient.Session.Http.HttpSession.ConnectCoreAsync(Uri uri, CancellationToken cancellationToken)
   at SocketIOClient.Session.SessionBase`1.ConnectAsync(CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at SocketIOClient.Session.SessionBase`1.ConnectAsync(CancellationToken cancellationToken)
   at SocketIOClient.SocketIO.TryConnectAsync(ISession session, CancellationToken cancellationToken)
   at SocketIOClient.SocketIO.ConnectCoreAsync(CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at SocketIOClient.SocketIO.ConnectCoreAsync(CancellationToken cancellationToken)
[2026-03-27 17:01:50.2954] [georg] [Fatal] [WPFApp] Unobserved task exception System.InvalidOperationException: An attempt was made to transition a task to a final state when it had already completed.
   at System.Threading.Tasks.TaskCompletionSource`1.SetResult(TResult result)
   at SocketIOClient.SocketIO.<ConnectAsync>b__62_1()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.CancellationTokenSource.ExecuteCallbackHandlers(Boolean throwOnFirstException)
[2026-03-27 17:01:50.3093] [georg] [Fatal] [WPFApp] Unobserved task exception System.InvalidOperationException: An attempt was made to transition a task to a final state when it had already completed.
   at System.Threading.Tasks.TaskCompletionSource`1.SetResult(TResult result)
   at SocketIOClient.SocketIO.<ConnectAsync>b__62_1()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.CancellationTokenSource.ExecuteCallbackHandlers(Boolean throwOnFirstException)
[2026-03-27 17:01:50.3093] [georg] [Fatal] [WPFApp] Unobserved task exception SocketIOClient.Exceptions.ConnectionException: Cannot connect to server 'SOME_SERVER_URL'
 ---> SocketIOClient.Session.ConnectionFailedException: Failed to connect to the server
 ---> System.Net.Http.HttpRequestException: No such host is known. (SOME_SERVER_URL)
 ---> System.Net.Sockets.SocketException (11001): No such host is known.
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
   at System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(String host, Int32 port, HttpRequestMessage initialRequest, Boolean async, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(String host, Int32 port, HttpRequestMessage initialRequest, Boolean async, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.InjectNewHttp11ConnectionAsync(QueueItem queueItem)
   at System.Threading.Tasks.TaskCompletionSourceWithCancellation`1.WaitWithCancellationAsync(CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
   at System.Net.Http.SocketsHttpHandler.<SendAsync>g__CreateHandlerAndSendAsync|115_0(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
   at SocketIOClient.Protocol.Http.SystemHttpClient.SendAsync(HttpRequest req, CancellationToken cancellationToken)
   at SocketIOClient.Protocol.Http.HttpAdapter.SendAsync(HttpRequest req, CancellationToken cancellationToken)
   at SocketIOClient.Session.Http.HttpSession.ConnectCoreAsync(Uri uri, CancellationToken cancellationToken)
   at SocketIOClient.Session.SessionBase`1.ConnectAsync(CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at SocketIOClient.Session.SessionBase`1.ConnectAsync(CancellationToken cancellationToken)
   at SocketIOClient.SocketIO.TryConnectAsync(ISession session, CancellationToken cancellationToken)
   at SocketIOClient.SocketIO.ConnectCoreAsync(CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at SocketIOClient.SocketIO.ConnectCoreAsync(CancellationToken cancellationToken)

I got this error after registering a callback to TaskScheduler.UnobservedTaskException.

Please let me know if you need a sample application.
The problem is that i want to be able to catch these errors when awaiting socket.ConnectAsync().

Many thanks,
George

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions