From 11e568c886ce1ced558dc638065f938ea3dee973 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Sun, 5 Jan 2014 22:16:16 -0800 Subject: Don't wait for a full buffer when reading TCP libnative erroneously would attempt to fill the entire buffer in a call to `read` before returning, when rather it should return immediately because there's not guaranteed to be any data that will ever be received again. Close #11328 --- src/libstd/io/net/tcp.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/libstd') diff --git a/src/libstd/io/net/tcp.rs b/src/libstd/io/net/tcp.rs index 52cca7f622b..c2a70e0120d 100644 --- a/src/libstd/io/net/tcp.rs +++ b/src/libstd/io/net/tcp.rs @@ -589,4 +589,25 @@ mod test { //peer_name(next_test_ip6()); socket_name(next_test_ip6()); }) + + iotest!(fn partial_read() { + let addr = next_test_ip4(); + let (p, c) = Chan::new(); + do spawn { + let mut srv = TcpListener::bind(addr).listen(); + c.send(()); + let mut cl = srv.accept().unwrap(); + cl.write([10]); + let mut b = [0]; + cl.read(b); + c.send(()); + } + + p.recv(); + let mut c = TcpStream::connect(addr).unwrap(); + let mut b = [0, ..10]; + assert_eq!(c.read(b), Some(1)); + c.write([1]); + p.recv(); + }) } -- cgit 1.4.1-3-g733a5