@@ -1669,9 +1669,24 @@ struct TestSocket: public TestBase
1669
1669
void Run ()
1670
1670
{
1671
1671
const int port = 30003 ;
1672
- Address address (0 ,0 ,0 ,0 , port);
1672
+ Address address (0 , 0 , 0 , 0 , port);
1673
+ Address bind_addr (0 , 0 , 0 , 0 , port);
1673
1674
Address address6 ((IPv6AddressBytes*) NULL , port);
1674
1675
1676
+ /*
1677
+ * Try to use the bind_address for servers with no localhost address
1678
+ * For example: FreeBSD jails
1679
+ */
1680
+ std::string bind_str = g_settings->get (" bind_address" );
1681
+ try {
1682
+ bind_addr.Resolve (bind_str.c_str ());
1683
+
1684
+ if (!bind_addr.isIPv6 ()) {
1685
+ address = bind_addr;
1686
+ }
1687
+ } catch (ResolveError &e) {
1688
+ }
1689
+
1675
1690
// IPv6 socket test
1676
1691
if (g_settings->getBool (" enable_ipv6" )) {
1677
1692
UDPSocket socket6;
@@ -1709,7 +1724,7 @@ struct TestSocket: public TestBase
1709
1724
UASSERT (memcmp (sender.getAddress6 ().sin6_addr .s6_addr ,
1710
1725
Address (&bytes, 0 ).getAddress6 ().sin6_addr .s6_addr , 16 ) == 0 );
1711
1726
}
1712
- catch (SendFailedException e) {
1727
+ catch (SendFailedException & e) {
1713
1728
errorstream << " IPv6 support enabled but not available!"
1714
1729
<< std::endl;
1715
1730
}
@@ -1722,7 +1737,15 @@ struct TestSocket: public TestBase
1722
1737
socket.Bind (address);
1723
1738
1724
1739
const char sendbuffer[] = " hello world!" ;
1725
- socket.Send (Address (127 , 0 , 0 ,1 , port), sendbuffer, sizeof (sendbuffer));
1740
+ /*
1741
+ * If there is a bind address, use it.
1742
+ * It's useful in container environments
1743
+ */
1744
+ if (address != Address (0 , 0 , 0 , 0 , port)) {
1745
+ socket.Send (address, sendbuffer, sizeof (sendbuffer));
1746
+ }
1747
+ else
1748
+ socket.Send (Address (127 , 0 , 0 ,1 , port), sendbuffer, sizeof (sendbuffer));
1726
1749
1727
1750
sleep_ms (50 );
1728
1751
@@ -1734,8 +1757,15 @@ struct TestSocket: public TestBase
1734
1757
}
1735
1758
// FIXME: This fails on some systems
1736
1759
UASSERT (strncmp (sendbuffer, rcvbuffer, sizeof (sendbuffer)) == 0 );
1737
- UASSERT (sender.getAddress ().sin_addr .s_addr ==
1738
- Address (127 , 0 , 0 , 1 , 0 ).getAddress ().sin_addr .s_addr );
1760
+
1761
+ if (address != Address (0 , 0 , 0 , 0 , port)) {
1762
+ UASSERT (sender.getAddress ().sin_addr .s_addr ==
1763
+ address.getAddress ().sin_addr .s_addr );
1764
+ }
1765
+ else {
1766
+ UASSERT (sender.getAddress ().sin_addr .s_addr ==
1767
+ Address (127 , 0 , 0 , 1 , 0 ).getAddress ().sin_addr .s_addr );
1768
+ }
1739
1769
}
1740
1770
}
1741
1771
};
0 commit comments