C # mailkit imap бездействует переподключение соединения сбрасывается одноранговым - PullRequest
1 голос
/ 05 июня 2019

Пример программы на странице github для imap в режиме бездействия сбрасывает соединение, установленное партнером через 9 минут при подключении к серверу gmail imap. Запуск консольного приложения dotnet core на raspberry Pi 3, подключенного к мобильной точке доступа в Интернет

Код отлично работает для любой другой сети или ПК. Он не работает только когда малина подключена к мобильной точке доступа

Код отлично работает при первом подключении. Это только разрывает и сбрасывает соединение, установленное узлом на этой единственной функции

private void IdleLoop(object state) {
            IdleState idle = (IdleState) state;
            lock (idle.Client.SyncRoot) {
                while (!idle.IsCancellationRequested) {
                    using (CancellationTokenSource timeout = new CancellationTokenSource()) {
                        using (Timer timer = new Timer(9 * 60 * 1000)) {
                            timer.Elapsed += (sender, e) => timeout.Cancel();
                            timer.AutoReset = false;
                            timer.Enabled = true;

                            try {
                                idle.SetTimeoutSource(timeout);

                                if (idle.Client.Capabilities.HasFlag(ImapCapabilities.Idle)) {

                                    //TODO ERROR
                                    idle.Client.Idle(timeout.Token, idle.CancellationToken);
                                }
                                else {
                                    Logger.Log("Issuing NoOp command to IMAP servers...");
                                    idle.Client.NoOp(idle.CancellationToken);
                                    WaitHandle.WaitAny(new[] { timeout.Token.WaitHandle, idle.CancellationToken.WaitHandle });
                                    Logger.Log("NoOp completed!");
                                }
                            }
                            catch (OperationCanceledException) {
                                break;
                            }
                            catch (ImapProtocolException) {
                                break;
                            }
                            catch (ImapCommandException) {
                                break;
                            }
                            finally {
                                idle.SetTimeoutSource(null);
                            }
                        }
                    }
                }
            }
        }

1 Ответ

1 голос
/ 05 июня 2019

Мобильные точки доступа не являются надежным интернет-соединением, поэтому вы получаете сообщение об ошибке «сброс соединения по одноранговым узлам».

Вы можете попытаться сократить продолжительность тайм-аута, но, в конечном итоге, то, что вам нужно сделатьповторное подключение, когда вы получаете эту ошибку (это неизбежно - даже при более надежном подключении к Интернету это может произойти).

...