Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#mailkit imap空闲重新连接由对等方重置_C#_Imap_Mailkit - Fatal编程技术网

C#mailkit imap空闲重新连接由对等方重置

C#mailkit imap空闲重新连接由对等方重置,c#,imap,mailkit,C#,Imap,Mailkit,github页面上imap idle的示例程序在连接到gmail imap服务器9分钟后引发对等方的连接重置。 在连接到移动热点互联网连接的raspberry Pi 3上运行dotnet core控制台应用程序 该代码适用于任何其他网络或pc。 只有当树莓连接到移动热点时,它才起作用 该代码在第一次连接时工作正常。它只在这个函数上中断并抛出对等方重置的连接 private void IdleLoop(object state) { IdleState idle = (Id

github页面上imap idle的示例程序在连接到gmail imap服务器9分钟后引发对等方的连接重置。 在连接到移动热点互联网连接的raspberry Pi 3上运行dotnet core控制台应用程序

该代码适用于任何其他网络或pc。 只有当树莓连接到移动热点时,它才起作用

该代码在第一次连接时工作正常。它只在这个函数上中断并抛出对等方重置的连接

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);
                            }
                        }
                    }
                }
            }
        }

移动热点不是可靠的internet连接,因此会出现“由对等方重置连接”错误


您可以尝试缩短超时时间,但最终,您需要做的是在出现错误时重新连接(这是不可避免的,即使在更可靠的internet连接上也可能发生)。

谢谢您的回复