summaryrefslogtreecommitdiff
path: root/src/tcp_listener.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tcp_listener.cpp')
-rw-r--r--src/tcp_listener.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/tcp_listener.cpp b/src/tcp_listener.cpp
index 22797e2..ccae1ae 100644
--- a/src/tcp_listener.cpp
+++ b/src/tcp_listener.cpp
@@ -119,20 +119,21 @@ void xs::tcp_listener_t::close ()
int xs::tcp_listener_t::set_address (const char *addr_)
{
// Convert the textual address into address structure.
- int rc = address.resolve (addr_, true, options.ipv4only ? true : false);
+ int rc = address_resolve_tcp (&address, addr_, true,
+ options.ipv4only ? true : false);
if (rc != 0)
return -1;
// Create a listening socket.
- s = open_tcp_socket (address.family (), false);
+ s = open_tcp_socket (address.ss_family, false);
// IPv6 address family not supported, try automatic downgrade to IPv4.
- if (address.family () == AF_INET6 && errno == EAFNOSUPPORT &&
+ if (address.ss_family == AF_INET6 && errno == EAFNOSUPPORT &&
!options.ipv4only) {
- rc = address.resolve (addr_, true, true);
+ rc = address_resolve_tcp (&address, addr_, true, true);
if (rc != 0)
return rc;
- s = open_tcp_socket (address.family (), false);
+ s = open_tcp_socket (address.ss_family, false);
}
if (s == retired_fd)
@@ -140,7 +141,7 @@ int xs::tcp_listener_t::set_address (const char *addr_)
// On some systems, IPv4 mapping in IPv6 sockets is disabled by default.
// Switch it on in such cases.
- if (address.family () == AF_INET6)
+ if (address.ss_family == AF_INET6)
enable_ipv4_mapping (s);
// Allow reusing of the address.
@@ -155,7 +156,7 @@ int xs::tcp_listener_t::set_address (const char *addr_)
#endif
// Bind the socket to the network interface and port.
- rc = bind (s, address.addr (), address.addrlen ());
+ rc = bind (s, (const sockaddr*) &address, address_size (&address));
#ifdef XS_HAVE_WINDOWS
if (rc == SOCKET_ERROR) {
wsa_error_to_errno ();