@@ -59,6 +59,8 @@ pub(crate) const SOCK_SEQPACKET: c_int =
59
59
pub ( crate ) use windows_sys:: Win32 :: Networking :: WinSock :: {
60
60
IPPROTO_ICMP , IPPROTO_ICMPV6 , IPPROTO_TCP , IPPROTO_UDP ,
61
61
} ;
62
+
63
+ pub ( crate ) use windows_sys:: Win32 :: Networking :: WinSock :: TCP_KEEPCNT ;
62
64
// Used in `SockAddr`.
63
65
pub ( crate ) use windows_sys:: Win32 :: Networking :: WinSock :: {
64
66
SOCKADDR as sockaddr, SOCKADDR_IN as sockaddr_in, SOCKADDR_IN6 as sockaddr_in6,
@@ -727,17 +729,24 @@ fn into_ms(duration: Option<Duration>) -> u32 {
727
729
}
728
730
729
731
pub ( crate ) fn set_tcp_keepalive ( socket : Socket , keepalive : & TcpKeepalive ) -> io:: Result < ( ) > {
730
- let mut keepalive = tcp_keepalive {
732
+ let mut w_keepalive = tcp_keepalive {
731
733
onoff : 1 ,
732
734
keepalivetime : into_ms ( keepalive. time ) ,
733
735
keepaliveinterval : into_ms ( keepalive. interval ) ,
734
736
} ;
737
+
738
+
739
+ if let Some ( retries) = keepalive. retries {
740
+ unsafe {
741
+ setsockopt ( socket, WinSock :: IPPROTO_TCP , WinSock :: TCP_KEEPCNT , retries as c_int ) ?
742
+ }
743
+ }
735
744
let mut out = 0 ;
736
745
syscall ! (
737
746
WSAIoctl (
738
747
socket,
739
748
SIO_KEEPALIVE_VALS ,
740
- & mut keepalive as * mut _ as * mut _,
749
+ & mut w_keepalive as * mut _ as * mut _,
741
750
size_of:: <tcp_keepalive>( ) as _,
742
751
ptr:: null_mut( ) ,
743
752
0 ,
@@ -931,7 +940,13 @@ pub(crate) fn unix_sockaddr(path: &Path) -> io::Result<SockAddr> {
931
940
storage. sun_family = crate :: sys:: AF_UNIX as sa_family_t ;
932
941
// `storage` was initialized to zero above, so the path is
933
942
// already null terminated.
934
- storage. sun_path [ ..bytes. len ( ) ] . copy_from_slice ( bytes) ;
943
+ storage. sun_path [ ..bytes. len ( ) ] . copy_from_slice (
944
+ bytes
945
+ . iter ( )
946
+ . map ( |b| * b as i8 )
947
+ . collect :: < Vec < _ > > ( )
948
+ . as_slice ( ) ,
949
+ ) ;
935
950
936
951
let base = storage as * const _ as usize ;
937
952
let path = & storage. sun_path as * const _ as usize ;
0 commit comments