summaryrefslogtreecommitdiff
path: root/src/tcp_listener.cpp
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@250bpm.com>2011-08-18 17:40:42 +0200
committerMartin Sustrik <sustrik@250bpm.com>2011-08-18 17:40:42 +0200
commitb6ecb00d23af3611da98d98f28e1c2583d428e00 (patch)
tree7130ed6e4c2d62fc151170f465c5245d5072b062 /src/tcp_listener.cpp
parent4a8dd1e404c78fb403763d830190755d2ac83228 (diff)
TCP address related functionality moved to tcp_address_t
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
Diffstat (limited to 'src/tcp_listener.cpp')
-rw-r--r--src/tcp_listener.cpp19
1 files changed, 8 insertions, 11 deletions
diff --git a/src/tcp_listener.cpp b/src/tcp_listener.cpp
index dd654b2..e78a4a3 100644
--- a/src/tcp_listener.cpp
+++ b/src/tcp_listener.cpp
@@ -55,8 +55,6 @@ zmq::tcp_listener_t::tcp_listener_t (io_thread_t *io_thread_,
s (retired_fd),
socket (socket_)
{
- memset (&addr, 0, sizeof (addr));
- addr_len = 0;
}
zmq::tcp_listener_t::~tcp_listener_t ()
@@ -122,26 +120,25 @@ void zmq::tcp_listener_t::close ()
int zmq::tcp_listener_t::set_address (const char *addr_)
{
- // Convert the interface into sockaddr_in structure.
- int rc = resolve_ip_interface (&addr, &addr_len, addr_,
- options.ipv4only ? true : false);
+ // Convert the textual address into address structure.
+ int rc = address.resolve (addr_, true, options.ipv4only ? true : false);
if (rc != 0)
return -1;
// Create a listening socket.
- s = ::socket (addr.ss_family, SOCK_STREAM, IPPROTO_TCP);
+ s = ::socket (address.family (), SOCK_STREAM, IPPROTO_TCP);
#ifdef ZMQ_HAVE_WINDOWS
if (s == INVALID_SOCKET)
wsa_error_to_errno ();
#endif
// IPv6 address family not supported, try automatic downgrade to IPv4.
- if (addr.ss_family == AF_INET6 && errno == EAFNOSUPPORT &&
+ if (address.family () == AF_INET6 && errno == EAFNOSUPPORT &&
!options.ipv4only) {
- rc = resolve_ip_interface (&addr, &addr_len, addr_, true);
+ rc = address.resolve (addr_, true, true);
if (rc != 0)
return rc;
- s = ::socket (addr.ss_family, SOCK_STREAM, IPPROTO_TCP);
+ s = ::socket (address.family (), SOCK_STREAM, IPPROTO_TCP);
}
#ifdef ZMQ_HAVE_WINDOWS
@@ -156,7 +153,7 @@ int zmq::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 (addr.ss_family == AF_INET6)
+ if (address.family () == AF_INET6)
enable_ipv4_mapping (s);
// Allow reusing of the address.
@@ -171,7 +168,7 @@ int zmq::tcp_listener_t::set_address (const char *addr_)
#endif
// Bind the socket to the network interface and port.
- rc = bind (s, (struct sockaddr*) &addr, addr_len);
+ rc = bind (s, address.addr (), address.addrlen ());
#ifdef ZMQ_HAVE_WINDOWS
if (rc == SOCKET_ERROR) {
wsa_error_to_errno ();