@@ -258,8 +258,8 @@ pub fn test_socketpair() {
258
258
}
259
259
260
260
mod recvfrom {
261
- use nix:: Result ;
262
261
use nix:: sys:: socket:: * ;
262
+ use nix:: { errno:: Errno , Result } ;
263
263
use std:: thread;
264
264
use super :: * ;
265
265
@@ -602,6 +602,51 @@ mod recvfrom {
602
602
assert_eq ! ( & buf[ ..DATA . len( ) ] , DATA ) ;
603
603
}
604
604
}
605
+
606
+ #[ test]
607
+ pub fn udp_inet6 ( ) {
608
+ let addr = std:: net:: Ipv6Addr :: from_str ( "::1" ) . unwrap ( ) ;
609
+ let rport = 6789 ;
610
+ let rstd_sa = SocketAddrV6 :: new ( addr, rport, 0 , 0 ) ;
611
+ let raddr = SockaddrIn6 :: from ( rstd_sa) ;
612
+ let sport = 6790 ;
613
+ let sstd_sa = SocketAddrV6 :: new ( addr, sport, 0 , 0 ) ;
614
+ let saddr = SockaddrIn6 :: from ( sstd_sa) ;
615
+ let rsock = socket (
616
+ AddressFamily :: Inet6 ,
617
+ SockType :: Datagram ,
618
+ SockFlag :: empty ( ) ,
619
+ None ,
620
+ )
621
+ . expect ( "receive socket failed" ) ;
622
+ match bind ( rsock, & raddr) {
623
+ Err ( Errno :: EADDRNOTAVAIL ) => {
624
+ println ! ( "IPv6 not available, skipping test." ) ;
625
+ return ;
626
+ }
627
+ Err ( e) => panic ! ( "bind: {}" , e) ,
628
+ Ok ( ( ) ) => ( ) ,
629
+ }
630
+ let ssock = socket (
631
+ AddressFamily :: Inet6 ,
632
+ SockType :: Datagram ,
633
+ SockFlag :: empty ( ) ,
634
+ None ,
635
+ )
636
+ . expect ( "send socket failed" ) ;
637
+ bind ( ssock, & saddr) . unwrap ( ) ;
638
+ let from = sendrecv (
639
+ rsock,
640
+ ssock,
641
+ move |s, m, flags| sendto ( s, m, & raddr, flags) ,
642
+ |_, _| { } ,
643
+ ) ;
644
+ assert_eq ! ( AddressFamily :: Inet6 , from. unwrap( ) . family( ) . unwrap( ) ) ;
645
+ let osent_addr = from. unwrap ( ) ;
646
+ let sent_addr = osent_addr. as_sockaddr_in6 ( ) . unwrap ( ) ;
647
+ assert_eq ! ( sent_addr. ip( ) , addr) ;
648
+ assert_eq ! ( sent_addr. port( ) , sport) ;
649
+ }
605
650
}
606
651
607
652
// Test error handling of our recvmsg wrapper
@@ -1505,8 +1550,10 @@ pub fn test_recv_ipv6pktinfo() {
1505
1550
1506
1551
let lo_ifaddr = loopback_address ( AddressFamily :: Inet6 ) ;
1507
1552
let ( lo_name, lo) = match lo_ifaddr {
1508
- Some ( ifaddr) => ( ifaddr. interface_name ,
1509
- ifaddr. address . expect ( "Expect IPv4 address on interface" ) ) ,
1553
+ Some ( ifaddr) => (
1554
+ ifaddr. interface_name ,
1555
+ ifaddr. address . expect ( "Expect IPv6 address on interface" ) ,
1556
+ ) ,
1510
1557
None => return ,
1511
1558
} ;
1512
1559
let receive = socket (
0 commit comments