diff --git a/src/libcore/rt/io/mod.rs b/src/libcore/rt/io/mod.rs index 14784fa95672..802e069a738f 100644 --- a/src/libcore/rt/io/mod.rs +++ b/src/libcore/rt/io/mod.rs @@ -348,7 +348,8 @@ pub enum IoErrorKind { ConnectionFailed, Closed, ConnectionRefused, - ConnectionReset + ConnectionReset, + BrokenPipe } // XXX: Can't put doc comments on macros diff --git a/src/libcore/rt/io/net/tcp.rs b/src/libcore/rt/io/net/tcp.rs index 04f4edd7e39f..eec3614d1297 100644 --- a/src/libcore/rt/io/net/tcp.rs +++ b/src/libcore/rt/io/net/tcp.rs @@ -233,7 +233,8 @@ mod test { loop { let mut stop = false; do io_error::cond.trap(|e| { - assert!(e.kind == ConnectionReset); + // NB: ECONNRESET on linux, EPIPE on mac + assert!(e.kind == ConnectionReset || e.kind == BrokenPipe); stop = true; }).in { stream.write(buf); diff --git a/src/libcore/rt/uv/mod.rs b/src/libcore/rt/uv/mod.rs index ee3c5ceffd23..93cafb835884 100644 --- a/src/libcore/rt/uv/mod.rs +++ b/src/libcore/rt/uv/mod.rs @@ -272,7 +272,9 @@ pub fn uv_error_to_io_error(uverr: UvError) -> IoError { EACCES => PermissionDenied, ECONNREFUSED => ConnectionRefused, ECONNRESET => ConnectionReset, - _ => { + EPIPE => BrokenPipe, + e => { + rtdebug!("e %u", e as uint); // XXX: Need to map remaining uv error types OtherIoError } diff --git a/src/libcore/rt/uv/uvll.rs b/src/libcore/rt/uv/uvll.rs index 94e6b82ab8fa..02659ab1eb91 100644 --- a/src/libcore/rt/uv/uvll.rs +++ b/src/libcore/rt/uv/uvll.rs @@ -40,6 +40,7 @@ pub static EADDRINFO: c_int = 2; pub static EACCES: c_int = 3; pub static ECONNREFUSED: c_int = 12; pub static ECONNRESET: c_int = 13; +pub static EPIPE: c_int = 36; pub struct uv_err_t { code: c_int,