OpenTl.ClientApi icon indicating copy to clipboard operation
OpenTl.ClientApi copied to clipboard

Application crash due unhandled exception in DotNetty when network gets disconnected

Open djonasdev opened this issue 6 years ago • 5 comments

I got the following Exception which let my application crash:

To get this Exception , you have to deactivate your network device during an established connection.

AppDomain.CurrentDomain.UnhandledException += (sender, args) => CurrentDomainOnUnhandledException(args);

How can I catch this Exception and won't let the app crash?

Unhandled Exception thrown: Message 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen' StackTrace ' bei DotNetty.Transport.Channels.Sockets.SocketChannelAsyncOperation.Validate() bei DotNetty.Transport.Channels.Sockets.AbstractSocketByteChannel.SocketByteChannelUnsafe.FinishRead(SocketChannelAsyncOperation operation) --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- bei OpenTl.ClientApi.MtProto.Services.RequestSenderService.<SendRequestAsync>d__121.MoveNext() bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) bei OpenTl.ClientApi.MtProto.Services.RequestSenderService.<SendRequestAsync>d__121.MoveNext() --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) bei OpenTl.ClientApi.Services.UpdatesService.<GetUpdatesFromState>d__11.MoveNext() bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) bei OpenTl.ClientApi.Services.UpdatesService.<GetUpdatesFromState>d__11.MoveNext() --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) bei OpenTl.ClientApi.Services.UpdatesService.<<StartReceiveUpdates>b__12_0>d.MoveNext() --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) bei OpenTl.ClientApi.Services.UpdatesService.<<StartReceiveUpdates>b__12_0>d.MoveNext() --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- bei System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c.<ThrowAsync>b__6_1(Object state) bei System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state) bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) bei System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() bei System.Threading.ThreadPoolWorkQueue.Dispatch() bei System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()'

log4net Log

2018-11-20 14:32:40,437 [14] ERROR OpenTl.ClientApi.MtProto.Layers.Top.Adapters.TopHandlerAdapter.ErrorExt - #5244012236128623456: Caught exception System.Net.Sockets.SocketException (0x80004005): Eine vorhandene Verbindung wurde vom Remotehost geschlossen bei DotNetty.Transport.Channels.Sockets.SocketChannelAsyncOperation.Validate() bei DotNetty.Transport.Channels.Sockets.AbstractSocketByteChannel.SocketByteChannelUnsafe.FinishRead(SocketChannelAsyncOperation operation) 2018-11-20 14:32:40,454 [14] ERROR OpenTl.ClientApi.MtProto.Services.RequestService.ReturnException - #5244012236128623456: All requests was processed with error System.Net.Sockets.SocketException (0x80004005): Eine vorhandene Verbindung wurde vom Remotehost geschlossen bei DotNetty.Transport.Channels.Sockets.SocketChannelAsyncOperation.Validate() bei DotNetty.Transport.Channels.Sockets.AbstractSocketByteChannel.SocketByteChannelUnsafe.FinishRead(SocketChannelAsyncOperation operation)

djonasdev avatar Nov 20 '18 12:11 djonasdev

@dojo90 Remote host forcibly closed connection. check the ip-address and port of the telegram server

vik-borisov avatar Nov 20 '18 15:11 vik-borisov

Thanks for reply! The Adress is alright. I closed the connection myself to provoke the error. Due to the forced connection close of my Internetproviders I get the same exception.

djonasdev avatar Nov 20 '18 15:11 djonasdev

@dojo90 can you send me a test with an error?

vik-borisov avatar Nov 20 '18 15:11 vik-borisov

I have used your SampleApp with the following code:

        private static FactorySettings settings = new FactorySettings
        {
            AppHash = "xxxxxxxxxxxxxx",
            AppId = xxxxxxxxxxxxxx,
            ServerAddress = "149.154.167.50",
            ServerPublicKey =
                "-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEAwVACPi9w23mF3tBkdZz+zwrzKOaaQdr01vAbU4E1pvkfj4sqDsm6\nlyDONS789sVoD/xCS9Y0hkkC3gtL1tSfTlgCMOOul9lcixlEKzwKENj1Yz/s7daS\nan9tqw3bfUV/nqgbhGX81v/+7RFAEd+RwFnK7a+XYl9sluzHRyVVaTTveB2GazTw\nEfzk2DWgkBluml8OREmvfraX3bkHZJTKX4EQSjBbbdJ2ZXIsRrYOXfaA+xayEGB+\n8hdlLmAjbCVfaigxX0CDqWeR1yFL9kwd9P0NsZRPsmoqVwMbMu7mStFai6aIhc3n\nSlv8kg9qv1m6XHVQY3PnEw+QQtqSIXklHwIDAQAB\n-----END RSA PUBLIC KEY-----",
            ServerPort = 443,
            SessionTag = "foo",
            Properties = new ApplicationProperties
            {
                AppVersion = "1.0.0", // You can leave as in the example
                DeviceModel = "PC", // You can leave as in the example
                LangCode = "en", // You can leave as in the example
                LangPack = "tdesktop", // You can leave as in the example
                SystemLangCode = "en", // You can leave as in the example
                SystemVersion = "Win 10 Pro" // You can leave as in the example
            }
        };
        private static async Task Main(string[] args)
        {
            IClientApi ClientApi = await ClientFactory.BuildClientAsync(settings).ConfigureAwait(false);

            // If the user is not authenticated
            if (!ClientApi.AuthService.CurrentUserId.HasValue)
            {
                // Auth
                var sentCode = await ClientApi.AuthService.SendCodeAsync("+xxxxxxxxxxxxxx").ConfigureAwait(false);
                
                try
                {
                    var code = Console.ReadLine();
                    await ClientApi.AuthService.SignInAsync("+xxxxxxxxxxxxxx", sentCode, code).ConfigureAwait(false);
                }
                catch (Exception ex)
                {

                }
            }

            if (ClientApi.AuthService.CurrentUserId.HasValue)
            {
                ClientApi.UpdatesService.StartReceiveUpdates(TimeSpan.FromSeconds(1));
                ClientApi.UpdatesService.AutoReceiveUpdates += update => Console.WriteLine(update);
            }

            Console.ReadKey();
        }

Just fill in your credentials. Then let it connect and receive updates (you cann see it in console). Then remove the cable from your network device, wait 2 seconds and plugin again:

screen exception

djonasdev avatar Nov 20 '18 16:11 djonasdev

any updates on this issue?

djonasdev avatar Jul 09 '19 15:07 djonasdev