@@ -970,7 +970,8 @@ impl WsaExtension {
970970#[ cfg( test) ]
971971mod tests {
972972 use std:: io:: prelude:: * ;
973- use std:: net:: { SocketAddr , TcpListener , TcpStream , UdpSocket } ;
973+ use std:: net:: { IpAddr , Ipv4Addr , Ipv6Addr , SocketAddr , SocketAddrV6 , TcpListener , TcpStream , UdpSocket } ;
974+ use std:: slice;
974975 use std:: thread;
975976
976977 use socket2:: { Domain , Socket , Type } ;
@@ -1239,4 +1240,36 @@ mod tests {
12391240 assert_eq ! ( addrs. remote( ) , Some ( remote) ) ;
12401241 } )
12411242 }
1243+
1244+ #[ test]
1245+ fn sockaddr_convert_4 ( ) {
1246+ let addr = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: new ( 3 , 4 , 5 , 6 ) ) , 0xabcd ) ;
1247+ let ( raw_addr, addr_len) = super :: socket_addr_to_ptrs ( & addr) ;
1248+ assert_eq ! ( addr_len, 16 ) ;
1249+ let addr_bytes = unsafe { slice:: from_raw_parts ( raw_addr as * const u8 , addr_len as usize ) } ;
1250+ assert_eq ! ( addr_bytes, & [ 2 , 0 , 0xab , 0xcd , 3 , 4 , 5 , 6 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ) ;
1251+
1252+ let addr2 = unsafe { super :: ptrs_to_socket_addr ( raw_addr, addr_len) . unwrap ( ) } ;
1253+ assert_eq ! ( addr, addr2) ;
1254+ }
1255+
1256+ #[ test]
1257+ fn sockaddr_convert_v6 ( ) {
1258+ let port = 0xabcd ;
1259+ let flowinfo = 0x12345678 ;
1260+ let scope_id = 0x987654321 ;
1261+ let addr = SocketAddr :: V6 ( SocketAddrV6 :: new (
1262+ Ipv6Addr :: new ( 0x0102 , 0x0304 , 0x0506 , 0x0708 , 0x090a , 0x0b0c , 0x0d0e , 0x0f10 ) ,
1263+ port,
1264+ flowinfo,
1265+ scope_id
1266+ ) ) ;
1267+ let ( raw_addr, addr_len) = super :: socket_addr_to_ptrs ( & addr) ;
1268+ assert_eq ! ( addr_len, 28 ) ;
1269+ let addr_bytes = unsafe { slice:: from_raw_parts ( raw_addr as * const u8 , addr_len as usize ) } ;
1270+ assert_eq ! ( addr_bytes, & [ 23 , 0 , 0xab , 0xcd , 3 , 4 , 5 , 6 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ) ;
1271+
1272+ let addr2 = unsafe { super :: ptrs_to_socket_addr ( raw_addr, addr_len) . unwrap ( ) } ;
1273+ assert_eq ! ( addr, addr2) ;
1274+ }
12421275}
0 commit comments