@@ -13,8 +13,9 @@ use std::os::windows::prelude::*;
1313
1414use net2:: TcpBuilder ;
1515use winapi:: * ;
16- use winapi:: shared:: inaddr:: { in_addr_S_un, IN_ADDR } ;
17- use winapi:: shared:: in6addr:: { in6_addr_u, IN6_ADDR } ;
16+ use winapi:: inaddr:: IN_ADDR ;
17+ use winapi:: ws2def:: SOCKADDR_IN ;
18+ use winapi:: ws2ipdef:: { in6_addr, sockaddr_in6} ;
1819use ws2_32:: * ;
1920
2021/// A type to represent a buffer in which a socket address will be stored.
@@ -487,7 +488,7 @@ fn cvt(i: c_int, size: DWORD) -> io::Result<Option<usize>> {
487488#[ repr( C ) ]
488489pub ( crate ) union SocketAddrCRepr {
489490 v4 : SOCKADDR_IN ,
490- v6 : SOCKADDR_IN6_LH ,
491+ v6 : sockaddr_in6 ,
491492}
492493
493494impl SocketAddrCRepr {
@@ -499,44 +500,27 @@ impl SocketAddrCRepr {
499500fn socket_addr_to_ptrs ( addr : & SocketAddr ) -> ( SocketAddrCRepr , c_int ) {
500501 match * addr {
501502 SocketAddr :: V4 ( ref a) => {
502- let sin_addr = unsafe {
503- let mut s_un = mem:: zeroed :: < in_addr_S_un > ( ) ;
504- * s_un. S_addr_mut ( ) = u32:: from_ne_bytes ( a. ip ( ) . octets ( ) ) ;
505- IN_ADDR { S_un : s_un }
506- } ;
507-
508503 let sockaddr_in = SOCKADDR_IN {
509504 sin_family : AF_INET as ADDRESS_FAMILY ,
510505 sin_port : a. port ( ) . to_be ( ) ,
511- sin_addr,
506+ sin_addr : IN_ADDR { S_un : u32 :: from_ne_bytes ( a . ip ( ) . octets ( ) ) } ,
512507 sin_zero : [ 0 ; 8 ] ,
513508 } ;
514509
515510 let sockaddr = SocketAddrCRepr { v4 : sockaddr_in } ;
516511 ( sockaddr, mem:: size_of :: < SOCKADDR_IN > ( ) as c_int )
517512 }
518513 SocketAddr :: V6 ( ref a) => {
519- let sin6_addr = unsafe {
520- let mut u = mem:: zeroed :: < in6_addr_u > ( ) ;
521- * u. Byte_mut ( ) = a. ip ( ) . octets ( ) ;
522- IN6_ADDR { u }
523- } ;
524- let u = unsafe {
525- let mut u = mem:: zeroed :: < SOCKADDR_IN6_LH_u > ( ) ;
526- * u. sin6_scope_id_mut ( ) = a. scope_id ( ) ;
527- u
528- } ;
529-
530- let sockaddr_in6 = SOCKADDR_IN6_LH {
531- sin6_family : AF_INET6 as ADDRESS_FAMILY ,
514+ let sockaddr_in6 = sockaddr_in6 {
515+ sin6_family : AF_INET6 as i16 ,
532516 sin6_port : a. port ( ) . to_be ( ) ,
533- sin6_addr,
517+ sin6_addr : in6_addr { s6_addr : a . ip ( ) . octets ( ) } ,
534518 sin6_flowinfo : a. flowinfo ( ) ,
535- u ,
519+ sin6_scope_id : a . scope_id ( ) ,
536520 } ;
537521
538522 let sockaddr = SocketAddrCRepr { v6 : sockaddr_in6 } ;
539- ( sockaddr, mem:: size_of :: < SOCKADDR_IN6_LH > ( ) as c_int )
523+ ( sockaddr, mem:: size_of :: < sockaddr_in6 > ( ) as c_int )
540524 }
541525 }
542526}
0 commit comments