summaryrefslogtreecommitdiffstats
path: root/ipc
diff options
context:
space:
mode:
authorIgor Matuszewski <igor@sequoia-pgp.org>2020-03-17 19:04:41 +0100
committerIgor Matuszewski <igor@sequoia-pgp.org>2020-03-19 14:40:02 +0100
commitb7885aca0468ff14c5910b7ce529368eee1d4a08 (patch)
tree13b667ecc2fc3764c91c51a810647b1e25719848 /ipc
parent131e963ac8847a7b50143e732bbb824b44b24c46 (diff)
ipc: Merge unhappy paths in TCP connection
Diffstat (limited to 'ipc')
-rw-r--r--ipc/src/lib.rs15
1 files changed, 4 insertions, 11 deletions
diff --git a/ipc/src/lib.rs b/ipc/src/lib.rs
index fa44e722..623aa66d 100644
--- a/ipc/src/lib.rs
+++ b/ipc/src/lib.rs
@@ -150,18 +150,11 @@ impl Descriptor {
let mut c = vec![];
file.read_to_end(&mut c)?;
- if let Some((cookie, a)) = Cookie::extract(c) {
- let addr = match String::from_utf8_lossy(&a).parse::<SocketAddr>() {
- Ok(addr) => addr,
- Err(..) => {
- /* Malformed. Invalidate the cookie and try again. */
- file.set_len(0)?;
- drop(file);
- return self.connect(handle);
- }
- };
+ if let Some((cookie, rest)) = Cookie::extract(c) {
+ let stream = String::from_utf8(rest).map_err(drop)
+ .and_then(|rest| rest.parse::<SocketAddr>().map_err(drop))
+ .and_then(|addr| TcpStream::connect(addr).map_err(drop));
- let stream = TcpStream::connect(addr);
if let Ok(s) = stream {
do_connect(cookie, s)
} else {