@@ -2,7 +2,7 @@ use std::{
2
2
io,
3
3
io:: IoSliceMut ,
4
4
mem:: { self , MaybeUninit } ,
5
- net:: { IpAddr , Ipv4Addr , Ipv6Addr , SocketAddr , SocketAddrV4 , SocketAddrV6 } ,
5
+ net:: { IpAddr , Ipv4Addr , SocketAddr , SocketAddrV4 , SocketAddrV6 } ,
6
6
os:: unix:: io:: AsRawFd ,
7
7
ptr,
8
8
task:: { Context , Poll } ,
@@ -332,6 +332,12 @@ pub fn caps() -> UdpCapabilities {
332
332
333
333
const CMSG_LEN : usize = 80 ;
334
334
335
+ fn in_addr ( addr : & Ipv4Addr ) -> libc:: in_addr {
336
+ libc:: in_addr {
337
+ s_addr : u32:: from_ne_bytes ( addr. octets ( ) ) ,
338
+ }
339
+ }
340
+
335
341
fn prepare_msg (
336
342
transmit : & Transmit ,
337
343
hdr : & mut libc:: msghdr ,
@@ -375,18 +381,16 @@ fn prepare_msg(
375
381
IpAddr :: V4 ( v4) => {
376
382
let pktinfo = libc:: in_pktinfo {
377
383
ipi_ifindex : 0 ,
378
- ipi_spec_dst : unsafe {
379
- * ( v4 as * const Ipv4Addr as * const ( ) as * const libc:: in_addr )
380
- } ,
384
+ ipi_spec_dst : in_addr ( v4) ,
381
385
ipi_addr : libc:: in_addr { s_addr : 0 } ,
382
386
} ;
383
387
encoder. push ( libc:: IPPROTO_IP , libc:: IP_PKTINFO , pktinfo) ;
384
388
}
385
389
IpAddr :: V6 ( v6) => {
386
390
let pktinfo = libc:: in6_pktinfo {
387
391
ipi6_ifindex : 0 ,
388
- ipi6_addr : unsafe {
389
- * ( v6 as * const Ipv6Addr as * const ( ) as * const libc :: in6_addr )
392
+ ipi6_addr : libc :: in6_addr {
393
+ s6_addr : v6 . octets ( ) ,
390
394
} ,
391
395
} ;
392
396
encoder. push ( libc:: IPPROTO_IPV6 , libc:: IPV6_PKTINFO , pktinfo) ;
0 commit comments