4
4
5
5
use crate :: sealed:: Sealed ;
6
6
use crate :: sys_common:: AsInner ;
7
+ use crate :: time:: Duration ;
7
8
use crate :: { io, net} ;
8
9
9
10
/// Os-specific extensions for [`TcpStream`]
@@ -60,6 +61,8 @@ pub trait TcpStreamExt: Sealed {
60
61
/// connections without data to process.
61
62
/// Contrary to other platforms `SO_ACCEPTFILTER` feature equivalent, there is
62
63
/// 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.
63
66
///
64
67
/// See [`man 7 tcp`](https://man7.org/linux/man-pages/man7/tcp.7.html)
65
68
///
@@ -69,14 +72,15 @@ pub trait TcpStreamExt: Sealed {
69
72
/// #![feature(tcp_deferaccept)]
70
73
/// use std::net::TcpStream;
71
74
/// use std::os::linux::net::TcpStreamExt;
75
+ /// use std::time::Duration;
72
76
///
73
77
/// let stream = TcpStream::connect("127.0.0.1:8080")
74
78
/// .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");
76
80
/// ```
77
81
#[ unstable( feature = "tcp_deferaccept" , issue = "119639" ) ]
78
82
#[ cfg( target_os = "linux" ) ]
79
- fn set_deferaccept ( & self , accept : u32 ) -> io:: Result < ( ) > ;
83
+ fn set_deferaccept ( & self , accept : Duration ) -> io:: Result < ( ) > ;
80
84
81
85
/// Gets the accept delay value (in seconds) of the `TCP_DEFER_ACCEPT` option.
82
86
///
@@ -88,15 +92,16 @@ pub trait TcpStreamExt: Sealed {
88
92
/// #![feature(tcp_deferaccept)]
89
93
/// use std::net::TcpStream;
90
94
/// use std::os::linux::net::TcpStreamExt;
95
+ /// use std::time::Duration;
91
96
///
92
97
/// let stream = TcpStream::connect("127.0.0.1:8080")
93
98
/// .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) );
96
101
/// ```
97
102
#[ unstable( feature = "tcp_deferaccept" , issue = "119639" ) ]
98
103
#[ cfg( target_os = "linux" ) ]
99
- fn deferaccept ( & self ) -> io:: Result < u32 > ;
104
+ fn deferaccept ( & self ) -> io:: Result < Duration > ;
100
105
}
101
106
102
107
#[ unstable( feature = "tcp_quickack" , issue = "96256" ) ]
@@ -113,12 +118,12 @@ impl TcpStreamExt for net::TcpStream {
113
118
}
114
119
115
120
#[ cfg( target_os = "linux" ) ]
116
- fn set_deferaccept ( & self , accept : u32 ) -> io:: Result < ( ) > {
121
+ fn set_deferaccept ( & self , accept : Duration ) -> io:: Result < ( ) > {
117
122
self . as_inner ( ) . as_inner ( ) . set_deferaccept ( accept)
118
123
}
119
124
120
125
#[ cfg( target_os = "linux" ) ]
121
- fn deferaccept ( & self ) -> io:: Result < u32 > {
126
+ fn deferaccept ( & self ) -> io:: Result < Duration > {
122
127
self . as_inner ( ) . as_inner ( ) . deferaccept ( )
123
128
}
124
129
}
0 commit comments