@@ -298,7 +298,7 @@ pub fn test_std_conversions() {
298298mod recvfrom {
299299 use super :: * ;
300300 use nix:: sys:: socket:: * ;
301- use nix:: Result ;
301+ use nix:: { errno :: Errno , Result } ;
302302 use std:: thread;
303303
304304 const MSG : & [ u8 ] = b"Hello, World!" ;
@@ -681,6 +681,51 @@ mod recvfrom {
681681 assert_eq ! ( & buf[ ..DATA . len( ) ] , DATA ) ;
682682 }
683683 }
684+
685+ #[ test]
686+ pub fn udp_inet6 ( ) {
687+ let addr = std:: net:: Ipv6Addr :: from_str ( "::1" ) . unwrap ( ) ;
688+ let rport = 6789 ;
689+ let rstd_sa = SocketAddrV6 :: new ( addr, rport, 0 , 0 ) ;
690+ let raddr = SockaddrIn6 :: from ( rstd_sa) ;
691+ let sport = 6790 ;
692+ let sstd_sa = SocketAddrV6 :: new ( addr, sport, 0 , 0 ) ;
693+ let saddr = SockaddrIn6 :: from ( sstd_sa) ;
694+ let rsock = socket (
695+ AddressFamily :: Inet6 ,
696+ SockType :: Datagram ,
697+ SockFlag :: empty ( ) ,
698+ None ,
699+ )
700+ . expect ( "receive socket failed" ) ;
701+ match bind ( rsock, & raddr) {
702+ Err ( Errno :: EADDRNOTAVAIL ) => {
703+ println ! ( "IPv6 not available, skipping test." ) ;
704+ return ;
705+ }
706+ Err ( e) => panic ! ( "bind: {}" , e) ,
707+ Ok ( ( ) ) => ( ) ,
708+ }
709+ let ssock = socket (
710+ AddressFamily :: Inet6 ,
711+ SockType :: Datagram ,
712+ SockFlag :: empty ( ) ,
713+ None ,
714+ )
715+ . expect ( "send socket failed" ) ;
716+ bind ( ssock, & saddr) . unwrap ( ) ;
717+ let from = sendrecv (
718+ rsock,
719+ ssock,
720+ move |s, m, flags| sendto ( s, m, & raddr, flags) ,
721+ |_, _| { } ,
722+ ) ;
723+ assert_eq ! ( AddressFamily :: Inet6 , from. unwrap( ) . family( ) . unwrap( ) ) ;
724+ let osent_addr = from. unwrap ( ) ;
725+ let sent_addr = osent_addr. as_sockaddr_in6 ( ) . unwrap ( ) ;
726+ assert_eq ! ( sent_addr. ip( ) , addr) ;
727+ assert_eq ! ( sent_addr. port( ) , sport) ;
728+ }
684729}
685730
686731// Test error handling of our recvmsg wrapper
@@ -1734,7 +1779,7 @@ pub fn test_recv_ipv6pktinfo() {
17341779 let ( lo_name, lo) = match lo_ifaddr {
17351780 Some ( ifaddr) => (
17361781 ifaddr. interface_name ,
1737- ifaddr. address . expect ( "Expect IPv4 address on interface" ) ,
1782+ ifaddr. address . expect ( "Expect IPv6 address on interface" ) ,
17381783 ) ,
17391784 None => return ,
17401785 } ;
0 commit comments