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`]
@@ -64,6 +65,8 @@ pub trait TcpStreamExt: Sealed {
64
65
/// connections without data to process.
65
66
/// Contrary to other platforms `SO_ACCEPTFILTER` feature equivalent, there is
66
67
/// no necessity to set it after the `listen` call.
68
+ /// Note that the delay is expressed as Duration from user's perspective
69
+ /// the call rounds it down to the nearest second.
67
70
///
68
71
/// See [`man 7 tcp`](https://man7.org/linux/man-pages/man7/tcp.7.html)
69
72
///
@@ -73,14 +76,15 @@ pub trait TcpStreamExt: Sealed {
73
76
/// #![feature(tcp_deferaccept)]
74
77
/// use std::net::TcpStream;
75
78
/// use std::os::linux::net::TcpStreamExt;
79
+ /// use std::time::Duration;
76
80
///
77
81
/// let stream = TcpStream::connect("127.0.0.1:8080")
78
82
/// .expect("Couldn't connect to the server...");
79
- /// stream.set_deferaccept(1 ).expect("set_deferaccept call failed");
83
+ /// stream.set_deferaccept(Duration::from_secs(1u64) ).expect("set_deferaccept call failed");
80
84
/// ```
81
85
#[ unstable( feature = "tcp_deferaccept" , issue = "119639" ) ]
82
86
#[ cfg( target_os = "linux" ) ]
83
- fn set_deferaccept ( & self , accept : u32 ) -> io:: Result < ( ) > ;
87
+ fn set_deferaccept ( & self , accept : Duration ) -> io:: Result < ( ) > ;
84
88
85
89
/// Gets the accept delay value (in seconds) of the `TCP_DEFER_ACCEPT` option.
86
90
///
@@ -92,15 +96,16 @@ pub trait TcpStreamExt: Sealed {
92
96
/// #![feature(tcp_deferaccept)]
93
97
/// use std::net::TcpStream;
94
98
/// use std::os::linux::net::TcpStreamExt;
99
+ /// use std::time::Duration;
95
100
///
96
101
/// let stream = TcpStream::connect("127.0.0.1:8080")
97
102
/// .expect("Couldn't connect to the server...");
98
- /// stream.set_deferaccept(1 ).expect("set_deferaccept call failed");
99
- /// assert_eq!(stream.deferaccept().unwrap_or(0 ), 1 );
103
+ /// stream.set_deferaccept(Duration::from_secs(1u64) ).expect("set_deferaccept call failed");
104
+ /// assert_eq!(stream.deferaccept().unwrap( ), Duration::from_secs(1u64) );
100
105
/// ```
101
106
#[ unstable( feature = "tcp_deferaccept" , issue = "119639" ) ]
102
107
#[ cfg( target_os = "linux" ) ]
103
- fn deferaccept ( & self ) -> io:: Result < u32 > ;
108
+ fn deferaccept ( & self ) -> io:: Result < Duration > ;
104
109
}
105
110
106
111
#[ stable( feature = "tcp_quickack" , since = "1.89.0" ) ]
@@ -117,12 +122,12 @@ impl TcpStreamExt for net::TcpStream {
117
122
}
118
123
119
124
#[ cfg( target_os = "linux" ) ]
120
- fn set_deferaccept ( & self , accept : u32 ) -> io:: Result < ( ) > {
125
+ fn set_deferaccept ( & self , accept : Duration ) -> io:: Result < ( ) > {
121
126
self . as_inner ( ) . as_inner ( ) . set_deferaccept ( accept)
122
127
}
123
128
124
129
#[ cfg( target_os = "linux" ) ]
125
- fn deferaccept ( & self ) -> io:: Result < u32 > {
130
+ fn deferaccept ( & self ) -> io:: Result < Duration > {
126
131
self . as_inner ( ) . as_inner ( ) . deferaccept ( )
127
132
}
128
133
}
0 commit comments