44
55use crate :: sealed:: Sealed ;
66use crate :: sys_common:: AsInner ;
7+ use crate :: time:: Duration ;
78use crate :: { io, net} ;
89
910/// Os-specific extensions for [`TcpStream`]
@@ -60,6 +61,8 @@ pub trait TcpStreamExt: Sealed {
6061 /// connections without data to process.
6162 /// Contrary to other platforms `SO_ACCEPTFILTER` feature equivalent, there is
6263 /// no necessity to set it after the `listen` call.
64+ /// Note that the delay is expressed as Duration from user's perspective
65+ /// the call rounds it to its nearest second.
6366 ///
6467 /// See [`man 7 tcp`](https://man7.org/linux/man-pages/man7/tcp.7.html)
6568 ///
@@ -69,14 +72,15 @@ pub trait TcpStreamExt: Sealed {
6972 /// #![feature(tcp_deferaccept)]
7073 /// use std::net::TcpStream;
7174 /// use std::os::linux::net::TcpStreamExt;
75+ /// use std::time::Duration;
7276 ///
7377 /// let stream = TcpStream::connect("127.0.0.1:8080")
7478 /// .expect("Couldn't connect to the server...");
75- /// stream.set_deferaccept(1 ).expect("set_deferaccept call failed");
79+ /// stream.set_deferaccept(Duration::from_secs(1u64) ).expect("set_deferaccept call failed");
7680 /// ```
7781 #[ unstable( feature = "tcp_deferaccept" , issue = "119639" ) ]
7882 #[ cfg( target_os = "linux" ) ]
79- fn set_deferaccept ( & self , accept : u32 ) -> io:: Result < ( ) > ;
83+ fn set_deferaccept ( & self , accept : Duration ) -> io:: Result < ( ) > ;
8084
8185 /// Gets the accept delay value (in seconds) of the `TCP_DEFER_ACCEPT` option.
8286 ///
@@ -88,15 +92,16 @@ pub trait TcpStreamExt: Sealed {
8892 /// #![feature(tcp_deferaccept)]
8993 /// use std::net::TcpStream;
9094 /// use std::os::linux::net::TcpStreamExt;
95+ /// use std::time::Duration;
9196 ///
9297 /// let stream = TcpStream::connect("127.0.0.1:8080")
9398 /// .expect("Couldn't connect to the server...");
94- /// stream.set_deferaccept(1 ).expect("set_deferaccept call failed");
95- /// assert_eq!(stream.deferaccept().unwrap_or(0 ), 1 );
99+ /// stream.set_deferaccept(Duration::from_secs(1u64) ).expect("set_deferaccept call failed");
100+ /// assert_eq!(stream.deferaccept().unwrap( ), Duration::from_secs(1u64) );
96101 /// ```
97102 #[ unstable( feature = "tcp_deferaccept" , issue = "119639" ) ]
98103 #[ cfg( target_os = "linux" ) ]
99- fn deferaccept ( & self ) -> io:: Result < u32 > ;
104+ fn deferaccept ( & self ) -> io:: Result < Duration > ;
100105}
101106
102107#[ unstable( feature = "tcp_quickack" , issue = "96256" ) ]
@@ -113,12 +118,12 @@ impl TcpStreamExt for net::TcpStream {
113118 }
114119
115120 #[ cfg( target_os = "linux" ) ]
116- fn set_deferaccept ( & self , accept : u32 ) -> io:: Result < ( ) > {
121+ fn set_deferaccept ( & self , accept : Duration ) -> io:: Result < ( ) > {
117122 self . as_inner ( ) . as_inner ( ) . set_deferaccept ( accept)
118123 }
119124
120125 #[ cfg( target_os = "linux" ) ]
121- fn deferaccept ( & self ) -> io:: Result < u32 > {
126+ fn deferaccept ( & self ) -> io:: Result < Duration > {
122127 self . as_inner ( ) . as_inner ( ) . deferaccept ( )
123128 }
124129}
0 commit comments