@@ -811,7 +811,7 @@ impl TcpSocketBuf: io::Reader {
811
811
}
812
812
fn read_byte ( ) -> int {
813
813
let mut bytes = ~[ 0 ] ;
814
- if self . read ( bytes, 1 u) == 0 {
814
+ if self . read ( bytes, 1 u) == 0 {
815
815
if self . end_of_stream {
816
816
-1
817
817
} else {
@@ -1280,7 +1280,10 @@ mod test {
1280
1280
fn test_gl_tcp_ipv4_server_client_reader_writer ( ) {
1281
1281
impl_gl_tcp_ipv4_server_client_reader_writer ( ) ;
1282
1282
}
1283
-
1283
+ #[ test]
1284
+ fn test_tcp_socket_impl_reader_handles_eof ( ) {
1285
+ impl_tcp_socket_impl_reader_handles_eof ( ) ;
1286
+ }
1284
1287
}
1285
1288
#[ cfg( target_arch="x86" ) ]
1286
1289
mod impl32 {
@@ -1553,6 +1556,49 @@ mod test {
1553
1556
*/
1554
1557
}
1555
1558
1559
+ fn impl_tcp_socket_impl_reader_handles_eof ( ) {
1560
+ use io:: { Reader , ReaderUtil } ;
1561
+ let hl_loop = uv:: global_loop:: get ( ) ;
1562
+ let server_ip = ~"127.0 . 0 . 1 ";
1563
+ let server_port = 10041 u;
1564
+ let expected_req = ~"GET /";
1565
+ let expected_resp = ~"A string\n with multiple lines\n " ;
1566
+
1567
+ let server_result_po = core:: comm:: Port :: < ~str > ( ) ;
1568
+ let server_result_ch = core:: comm:: Chan ( & server_result_po) ;
1569
+
1570
+ let cont_po = core:: comm:: Port :: < ( ) > ( ) ;
1571
+ let cont_ch = core:: comm:: Chan ( & cont_po) ;
1572
+ // server
1573
+ do task:: spawn_sched ( task:: ManualThreads ( 1 u) ) {
1574
+ let actual_req = do comm:: listen |server_ch| {
1575
+ run_tcp_test_server (
1576
+ server_ip,
1577
+ server_port,
1578
+ expected_resp,
1579
+ server_ch,
1580
+ cont_ch,
1581
+ hl_loop)
1582
+ } ;
1583
+ server_result_ch. send ( actual_req) ;
1584
+ } ;
1585
+ core:: comm:: recv ( cont_po) ;
1586
+ // client
1587
+ log ( debug, ~"server started, firing up client..");
1588
+ let server_addr = ip::v4::parse_addr(server_ip);
1589
+ let conn_result = connect(server_addr, server_port, hl_loop);
1590
+ if result::is_err(&conn_result) {
1591
+ assert false;
1592
+ }
1593
+ let sock_buf = @socket_buf(result::unwrap(move conn_result));
1594
+ buf_write(sock_buf, expected_req);
1595
+
1596
+ let buf_reader = sock_buf as Reader;
1597
+ let actual_response = str::from_bytes(buf_reader.read_whole_stream());
1598
+ log(debug, fmt!(" Actual response: %s", actual_response) ) ;
1599
+ assert expected_resp == actual_response;
1600
+ }
1601
+
1556
1602
fn buf_write < W : io:: Writer > ( w : & W , val : & str ) {
1557
1603
log ( debug, fmt ! ( "BUF_WRITE: val len %?" , str :: len( val) ) ) ;
1558
1604
do str:: byte_slice ( val) |b_slice| {
0 commit comments