@@ -8,7 +8,7 @@ use std::os::windows::raw::SOCKET as StdSocket; // winapi uses usize, stdlib use
88use winapi:: ctypes:: { c_char, c_int, c_ushort} ;
99use winapi:: shared:: minwindef:: { BOOL , TRUE , FALSE } ;
1010use winapi:: um:: winsock2:: {
11- self , closesocket, linger, setsockopt, PF_INET , PF_INET6 , SOCKET , SOCKET_ERROR ,
11+ self , closesocket, linger, setsockopt, getsockopt , PF_INET , PF_INET6 , SOCKET , SOCKET_ERROR ,
1212 SOCK_STREAM , SOL_SOCKET , SO_LINGER , SO_REUSEADDR ,
1313} ;
1414
@@ -87,6 +87,22 @@ pub(crate) fn set_reuseaddr(socket: TcpSocket, reuseaddr: bool) -> io::Result<()
8787 }
8888}
8989
90+ pub ( crate ) fn get_reuseaddr ( socket : TcpSocket ) -> io:: Result < bool > {
91+ let mut optval: c_char = 0 ;
92+ let mut optlen = size_of :: < BOOL > ( ) as c_int ;
93+
94+ match unsafe { getsockopt (
95+ socket,
96+ SOL_SOCKET ,
97+ SO_REUSEADDR ,
98+ & mut optval as * mut _ as * mut _ ,
99+ & mut optlen,
100+ ) } {
101+ SOCKET_ERROR => Err ( io:: Error :: last_os_error ( ) ) ,
102+ _ => Ok ( optval != 0 ) ,
103+ }
104+ }
105+
90106pub ( crate ) fn set_linger ( socket : TcpSocket , dur : Option < Duration > ) -> io:: Result < ( ) > {
91107 let val: linger = linger {
92108 l_onoff : if dur. is_some ( ) { 1 } else { 0 } ,
0 commit comments