@@ -1410,7 +1410,7 @@ impl IntoRawFd for UnixDatagram {
14101410#[ cfg( all( test, not( target_os = "emscripten" ) ) ) ]
14111411mod test {
14121412 use thread;
1413- use io;
1413+ use io:: { self , ErrorKind } ;
14141414 use io:: prelude:: * ;
14151415 use time:: Duration ;
14161416 use sys_common:: io:: test:: tmpdir;
@@ -1613,6 +1613,27 @@ mod test {
16131613 assert ! ( kind == io:: ErrorKind :: WouldBlock || kind == io:: ErrorKind :: TimedOut ) ;
16141614 }
16151615
1616+ // Ensure the `set_read_timeout` and `set_write_timeout` calls return errors
1617+ // when passed zero Durations
1618+ #[ test]
1619+ fn test_unix_stream_timeout_zero_duration ( ) {
1620+ let dir = tmpdir ( ) ;
1621+ let socket_path = dir. path ( ) . join ( "sock" ) ;
1622+
1623+ let listener = or_panic ! ( UnixListener :: bind( & socket_path) ) ;
1624+ let stream = or_panic ! ( UnixStream :: connect( & socket_path) ) ;
1625+
1626+ let result = stream. set_write_timeout ( Some ( Duration :: new ( 0 , 0 ) ) ) ;
1627+ let err = result. unwrap_err ( ) ;
1628+ assert_eq ! ( err. kind( ) , ErrorKind :: InvalidInput ) ;
1629+
1630+ let result = stream. set_read_timeout ( Some ( Duration :: new ( 0 , 0 ) ) ) ;
1631+ let err = result. unwrap_err ( ) ;
1632+ assert_eq ! ( err. kind( ) , ErrorKind :: InvalidInput ) ;
1633+
1634+ drop ( listener) ;
1635+ }
1636+
16161637 #[ test]
16171638 fn test_unix_datagram ( ) {
16181639 let dir = tmpdir ( ) ;
@@ -1712,6 +1733,24 @@ mod test {
17121733 thread. join ( ) . unwrap ( ) ;
17131734 }
17141735
1736+ // Ensure the `set_read_timeout` and `set_write_timeout` calls return errors
1737+ // when passed zero Durations
1738+ #[ test]
1739+ fn test_unix_datagram_timeout_zero_duration ( ) {
1740+ let dir = tmpdir ( ) ;
1741+ let path = dir. path ( ) . join ( "sock" ) ;
1742+
1743+ let datagram = or_panic ! ( UnixDatagram :: bind( & path) ) ;
1744+
1745+ let result = datagram. set_write_timeout ( Some ( Duration :: new ( 0 , 0 ) ) ) ;
1746+ let err = result. unwrap_err ( ) ;
1747+ assert_eq ! ( err. kind( ) , ErrorKind :: InvalidInput ) ;
1748+
1749+ let result = datagram. set_read_timeout ( Some ( Duration :: new ( 0 , 0 ) ) ) ;
1750+ let err = result. unwrap_err ( ) ;
1751+ assert_eq ! ( err. kind( ) , ErrorKind :: InvalidInput ) ;
1752+ }
1753+
17151754 #[ test]
17161755 fn abstract_namespace_not_allowed ( ) {
17171756 assert ! ( UnixStream :: connect( "\0 asdf" ) . is_err( ) ) ;
0 commit comments