diff options
author | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2020-09-12 21:33:25 +0300 |
---|---|---|
committer | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2020-09-12 21:33:25 +0300 |
commit | 7c6e3658c752c99382bcf0268719e8c2d3f49979 (patch) | |
tree | bb11b399e2a541535ad458e6a00efb8c2dd2aebb /melib | |
parent | 5079881a4c3dfd39b084f6a78b42899a55cde789 (diff) |
melib/imap: try NOOPing in connect()
Diffstat (limited to 'melib')
-rw-r--r-- | melib/src/backends/imap/connection.rs | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/melib/src/backends/imap/connection.rs b/melib/src/backends/imap/connection.rs index 877347dc..64c5364f 100644 --- a/melib/src/backends/imap/connection.rs +++ b/melib/src/backends/imap/connection.rs @@ -526,8 +526,23 @@ impl ImapConnection { self.stream = Err(err); } } - if self.stream.is_ok() { - return Ok(()); + if debug!(self.stream.is_ok()) { + let mut ret = String::new(); + if let Err(err) = try_await(async { + self.send_command(b"NOOP").await?; + self.read_response(&mut ret, RequiredResponses::empty()) + .await + }) + .await + { + debug!("connect(): connection is probably dead: {:?}", &err); + } else { + debug!( + "connect(): connection is probably alive, NOOP returned {:?}", + &ret + ); + return Ok(()); + } } let new_stream = debug!(ImapStream::new_connection(&self.server_conf).await); if let Err(err) = new_stream.as_ref() { @@ -714,6 +729,7 @@ impl ImapConnection { } Err(err) } else { + *self.uid_store.is_online.lock().unwrap() = (Instant::now(), Ok(())); Ok(()) } } |