@@ -42,6 +42,8 @@ use std::num::NonZeroUsize;
42
42
use std:: os:: unix:: io:: AsRawFd ;
43
43
#[ cfg( windows) ]
44
44
use std:: os:: windows:: io:: AsRawSocket ;
45
+ use windows_sys:: Win32 :: Networking :: WinSock :: WSAEINVAL ;
46
+
45
47
#[ cfg( unix) ]
46
48
use std:: path:: Path ;
47
49
use std:: str;
@@ -1607,59 +1609,36 @@ fn original_dst() {
1607
1609
}
1608
1610
1609
1611
#[ test]
1610
- #[ cfg( all(
1611
- feature = "all" ,
1612
- target_os = "windows"
1613
- ) ) ]
1612
+ #[ cfg( all( feature = "all" , target_os = "windows" ) ) ]
1614
1613
fn original_dst ( ) {
1615
- use windows_sys:: Win32 :: Networking :: WinSock :: SOMAXCONN ;
1616
-
1617
-
1618
- let socket = Socket :: new ( Domain :: IPV4 , Type :: STREAM , Some ( Protocol :: TCP ) ) . unwrap ( ) ;
1619
- let addr = SocketAddr :: from ( ( [ 127 , 0 , 0 , 1 ] , 8000 ) ) ;
1620
- match socket. bind ( & SockAddr :: from ( addr) ) {
1621
- Ok ( _) => { }
1622
- Err ( err) => panic ! ( "failed to bind socket: {}" , err) ,
1623
- } ;
1624
- match socket. listen ( SOMAXCONN as i32 ) {
1625
- Ok ( _) => { }
1626
- Err ( err) => panic ! ( "failed to listen on socket: {}" , err) ,
1627
- } ;
1628
- // Socket must be in an accepting state for SOL_IP and SO_ORIGINAL_DST
1629
- match socket. accept ( ) {
1630
- Ok ( ( socket, _) ) => {
1631
- match socket. original_dst ( ) {
1632
- Ok ( addr) => {
1633
- println ! ( "Original destination: {:?}" , addr) ;
1634
- }
1635
- Err ( err) => panic ! ( "failed to get original destination: {}" , err) ,
1636
- }
1637
- }
1638
- Err ( err) => panic ! ( "failed to accept connection: {}" , err) ,
1639
-
1640
- } ;
1614
+ let socket = Socket :: new ( Domain :: IPV6 , Type :: STREAM , None ) . unwrap ( ) ;
1615
+ match socket. original_dst ( ) {
1616
+ Ok ( _) => panic ! ( "original_dst on non-redirected socket should fail" ) ,
1617
+ Err ( err) => assert_eq ! ( err. raw_os_error( ) , Some ( WSAEINVAL ) ) ,
1618
+ }
1641
1619
1642
- // let socket = Socket::new(Domain::IPV6, Type::STREAM, None).unwrap();
1643
- // match socket.original_dst() {
1644
- // Ok(_) => panic!("original_dst on non-redirected socket should fail"),
1645
- // Err(err) => assert_eq!(err.raw_os_error(), Some(SOCKET_ERROR)),
1646
- // }
1620
+ // Not supported on IPv6 socket.
1621
+ let socket = Socket :: new ( Domain :: IPV6 , Type :: STREAM , None ) . unwrap ( ) ;
1622
+ match socket. original_dst_ipv6 ( ) {
1623
+ Ok ( _) => panic ! ( "original_dst_ipv6 on non-redirected socket should fail" ) ,
1624
+ Err ( err) => assert_eq ! ( err. raw_os_error( ) , Some ( WSAEINVAL ) ) ,
1625
+ }
1647
1626
}
1648
1627
1649
1628
#[ test]
1650
- #[ cfg( all( feature = "all" , any ( target_os = "android" , target_os = "linux" ) ) ) ]
1629
+ #[ cfg( all( feature = "all" , target_os = "windows" ) ) ]
1651
1630
fn original_dst_ipv6 ( ) {
1652
1631
let socket = Socket :: new ( Domain :: IPV6 , Type :: STREAM , None ) . unwrap ( ) ;
1653
1632
match socket. original_dst_ipv6 ( ) {
1654
1633
Ok ( _) => panic ! ( "original_dst_ipv6 on non-redirected socket should fail" ) ,
1655
- Err ( err) => assert_eq ! ( err. raw_os_error( ) , Some ( libc :: ENOENT ) ) ,
1634
+ Err ( err) => assert_eq ! ( err. raw_os_error( ) , Some ( WSAEINVAL ) ) ,
1656
1635
}
1657
1636
1658
1637
// Not supported on IPv4 socket.
1659
1638
let socket = Socket :: new ( Domain :: IPV4 , Type :: STREAM , None ) . unwrap ( ) ;
1660
1639
match socket. original_dst_ipv6 ( ) {
1661
1640
Ok ( _) => panic ! ( "original_dst_ipv6 on non-redirected socket should fail" ) ,
1662
- Err ( err) => assert_eq ! ( err. raw_os_error( ) , Some ( libc :: EOPNOTSUPP ) ) ,
1641
+ Err ( err) => assert_eq ! ( err. raw_os_error( ) , Some ( WSAEINVAL ) ) ,
1663
1642
}
1664
1643
}
1665
1644
0 commit comments