@@ -13,8 +13,9 @@ use std::os::windows::prelude::*;
13
13
14
14
use net2:: TcpBuilder ;
15
15
use 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} ;
18
19
use ws2_32:: * ;
19
20
20
21
/// 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>> {
487
488
#[ repr( C ) ]
488
489
pub ( crate ) union SocketAddrCRepr {
489
490
v4 : SOCKADDR_IN ,
490
- v6 : SOCKADDR_IN6_LH ,
491
+ v6 : sockaddr_in6 ,
491
492
}
492
493
493
494
impl SocketAddrCRepr {
@@ -499,44 +500,27 @@ impl SocketAddrCRepr {
499
500
fn socket_addr_to_ptrs ( addr : & SocketAddr ) -> ( SocketAddrCRepr , c_int ) {
500
501
match * addr {
501
502
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
-
508
503
let sockaddr_in = SOCKADDR_IN {
509
504
sin_family : AF_INET as ADDRESS_FAMILY ,
510
505
sin_port : a. port ( ) . to_be ( ) ,
511
- sin_addr,
506
+ sin_addr : IN_ADDR { S_un : u32 :: from_ne_bytes ( a . ip ( ) . octets ( ) ) } ,
512
507
sin_zero : [ 0 ; 8 ] ,
513
508
} ;
514
509
515
510
let sockaddr = SocketAddrCRepr { v4 : sockaddr_in } ;
516
511
( sockaddr, mem:: size_of :: < SOCKADDR_IN > ( ) as c_int )
517
512
}
518
513
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 ,
532
516
sin6_port : a. port ( ) . to_be ( ) ,
533
- sin6_addr,
517
+ sin6_addr : in6_addr { s6_addr : a . ip ( ) . octets ( ) } ,
534
518
sin6_flowinfo : a. flowinfo ( ) ,
535
- u ,
519
+ sin6_scope_id : a . scope_id ( ) ,
536
520
} ;
537
521
538
522
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 )
540
524
}
541
525
}
542
526
}
0 commit comments