@@ -63,6 +63,7 @@ pub fn send_msg(
63
63
cmsgs. push ( ControlMessage :: TxTime ( & raw_time) ) ;
64
64
}
65
65
66
+ let client_addr = dst. map ( SockaddrStorage :: from) ;
66
67
raw_send_to (
67
68
& fd. as_fd ( ) ,
68
69
send_buf,
@@ -76,8 +77,9 @@ pub fn send_msg(
76
77
#[ cfg( target_os = "linux" ) ]
77
78
pub fn send_with_cmsgs (
78
79
fd : impl AsFd , send_buf : & [ u8 ] , cmsgs : & [ ControlMessage ] ,
79
- client_addr : & SockaddrStorage ,
80
+ dst : Option < SocketAddr > ,
80
81
) -> SyscallResult < usize > {
82
+ let client_addr = dst. map ( SockaddrStorage :: from) ;
81
83
raw_send_to ( & fd. as_fd ( ) , send_buf, cmsgs, MsgFlags :: empty ( ) , client_addr)
82
84
}
83
85
@@ -160,6 +162,19 @@ pub fn recv_msg(
160
162
}
161
163
}
162
164
165
+ fn std_time_to_u64 ( time : & Instant ) -> u64 {
166
+ const NANOS_PER_SEC : u64 = 1_000_000_000 ;
167
+ const INSTANT_ZERO : std:: time:: Instant =
168
+ unsafe { std:: mem:: transmute ( std:: time:: UNIX_EPOCH ) } ;
169
+
170
+ let raw_time = time. duration_since ( INSTANT_ZERO ) ;
171
+
172
+ let sec = raw_time. as_secs ( ) ;
173
+ let nsec = raw_time. subsec_nanos ( ) ;
174
+
175
+ sec * NANOS_PER_SEC + nsec as u64
176
+ }
177
+
163
178
#[ cfg( all( test, target_os = "linux" , not( target_os = "android" ) ) ) ]
164
179
mod tests {
165
180
use nix:: cmsg_space;
@@ -315,7 +330,7 @@ mod tests {
315
330
316
331
send_msg ( send, send_buf, SendMsgCmsgSettings {
317
332
segment_size : None ,
318
- tx_time : Some ( Instant :: now ( ) + std:: time:: Duration :: from_millis ( 5 ) ) ,
333
+ tx_time : Some ( Instant :: now ( ) + std:: time:: Duration :: from_secs ( 5 ) ) ,
319
334
dst : addr,
320
335
} ) ?;
321
336
0 commit comments