diff options
author | Martin Sustrik <sustrik@250bpm.com> | 2011-07-28 13:46:16 +0200 |
---|---|---|
committer | Martin Sustrik <sustrik@250bpm.com> | 2011-07-28 13:46:16 +0200 |
commit | 46b053b8d67ba4826302d53268edccf919e6d785 (patch) | |
tree | 25e3bd4710a5cfcbe72055a4b03260fb16a06446 /src/ipc_listener.cpp | |
parent | 5ac63140b01fed145fa41f613308e134420920ab (diff) |
Dead code removed from TCP and IPC transports
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
Diffstat (limited to 'src/ipc_listener.cpp')
-rw-r--r-- | src/ipc_listener.cpp | 208 |
1 files changed, 33 insertions, 175 deletions
diff --git a/src/ipc_listener.cpp b/src/ipc_listener.cpp index e11d522..a61ceed 100644 --- a/src/ipc_listener.cpp +++ b/src/ipc_listener.cpp @@ -18,34 +18,24 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "ipc_listener.hpp" + +#if !defined ZMQ_HAVE_WINDOWS && !defined ZMQ_HAVE_OPENVMS + #include <new> #include <string.h> -#include "ipc_listener.hpp" -#include "platform.hpp" #include "tcp_engine.hpp" #include "io_thread.hpp" #include "session.hpp" #include "config.hpp" #include "err.hpp" -#ifdef ZMQ_HAVE_WINDOWS -#include "windows.hpp" -#else #include <unistd.h> #include <sys/socket.h> -#include <arpa/inet.h> -#include <netinet/tcp.h> -#include <netinet/in.h> -#include <netdb.h> #include <fcntl.h> -#ifndef ZMQ_HAVE_OPENVMS #include <sys/un.h> -#else -#include <ioctl.h> -#endif -#endif zmq::ipc_listener_t::ipc_listener_t (io_thread_t *io_thread_, socket_base_t *socket_, const options_t &options_) : @@ -105,176 +95,51 @@ void zmq::ipc_listener_t::in_event () send_attach (session, engine, false); } -#ifdef ZMQ_HAVE_WINDOWS - -int zmq::ipc_listener_t::set_address (const char *protocol_, const char *addr_) +int zmq::ipc_listener_t::set_address (const char *addr_) { - // IPC protocol is not supported on Windows platform. - if (strcmp (protocol_, "tcp") != 0 ) { - errno = EPROTONOSUPPORT; - return -1; - } + // Get rid of the file associated with the UNIX domain socket that + // may have been left behind by the previous run of the application. + ::unlink (addr_); - // Convert the interface into sockaddr_in structure. - int rc = resolve_ip_interface (&addr, &addr_len, addr_); + // Convert the address into sockaddr_un structure. + int rc = resolve_local_path (&addr, &addr_len, addr_); if (rc != 0) - return rc; + return -1; // Create a listening socket. - s = ::socket (addr.ss_family, SOCK_STREAM, IPPROTO_TCP); - if (s == INVALID_SOCKET) { - wsa_error_to_errno (); + s = ::socket (AF_UNIX, SOCK_STREAM, 0); + if (s == -1) return -1; - } - // Allow reusing of the address. - int flag = 1; - rc = setsockopt (s, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, - (const char*) &flag, sizeof (int)); - wsa_assert (rc != SOCKET_ERROR); + // Set the non-blocking flag. + int flag = fcntl (s, F_GETFL, 0); + if (flag == -1) + flag = 0; + rc = fcntl (s, F_SETFL, flag | O_NONBLOCK); + errno_assert (rc != -1); - // Bind the socket to the network interface and port. + // Bind the socket to the file path. rc = bind (s, (struct sockaddr*) &addr, addr_len); - if (rc == SOCKET_ERROR) { - wsa_error_to_errno (); + if (rc != 0) { + int err = errno; + if (close () != 0) + return -1; + errno = err; return -1; } + has_file = true; // Listen for incomming connections. rc = listen (s, options.backlog); - if (rc == SOCKET_ERROR) { - wsa_error_to_errno (); - return -1; - } - - return 0; -} - -int zmq::ipc_listener_t::close () -{ - zmq_assert (s != retired_fd); - int rc = closesocket (s); - wsa_assert (rc != SOCKET_ERROR); - s = retired_fd; - return 0; -} - -zmq::fd_t zmq::ipc_listener_t::accept () -{ - zmq_assert (s != retired_fd); - - // Accept one incoming connection. - fd_t sock = ::accept (s, NULL, NULL); - if (sock == INVALID_SOCKET && - (WSAGetLastError () == WSAEWOULDBLOCK || - WSAGetLastError () == WSAECONNRESET)) - return retired_fd; - - zmq_assert (sock != INVALID_SOCKET); - - // Set to non-blocking mode. - unsigned long argp = 1; - int rc = ioctlsocket (sock, FIONBIO, &argp); - wsa_assert (rc != SOCKET_ERROR); - - return sock; -} - -#else - -int zmq::ipc_listener_t::set_address (const char *protocol_, const char *addr_) -{ - if (strcmp (protocol_, "tcp") == 0 ) { - - // Resolve the sockaddr to bind to. - int rc = resolve_ip_interface (&addr, &addr_len, addr_); - if (rc != 0) - return -1; - - // Create a listening socket. - s = ::socket (addr.ss_family, SOCK_STREAM, IPPROTO_TCP); - if (s == -1) - return -1; - - // Allow reusing of the address. - int flag = 1; - rc = setsockopt (s, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof (int)); - errno_assert (rc == 0); - - // Bind the socket to the network interface and port. - rc = bind (s, (struct sockaddr*) &addr, addr_len); - if (rc != 0) { - int err = errno; - if (close () != 0) - return -1; - errno = err; - return -1; - } - - // Listen for incomming connections. - rc = listen (s, options.backlog); - if (rc != 0) { - int err = errno; - if (close () != 0) - return -1; - errno = err; + if (rc != 0) { + int err = errno; + if (close () != 0) return -1; - } - - return 0; + errno = err; + return -1; } -#ifndef ZMQ_HAVE_OPENVMS - else if (strcmp (protocol_, "ipc") == 0) { - // Get rid of the file associated with the UNIX domain socket that - // may have been left behind by the previous run of the application. - ::unlink (addr_); - - // Convert the address into sockaddr_un structure. - int rc = resolve_local_path (&addr, &addr_len, addr_); - if (rc != 0) - return -1; - - // Create a listening socket. - s = ::socket (AF_UNIX, SOCK_STREAM, 0); - if (s == -1) - return -1; - - // Set the non-blocking flag. - int flag = fcntl (s, F_GETFL, 0); - if (flag == -1) - flag = 0; - rc = fcntl (s, F_SETFL, flag | O_NONBLOCK); - errno_assert (rc != -1); - - // Bind the socket to the file path. - rc = bind (s, (struct sockaddr*) &addr, addr_len); - if (rc != 0) { - int err = errno; - if (close () != 0) - return -1; - errno = err; - return -1; - } - has_file = true; - - // Listen for incomming connections. - rc = listen (s, options.backlog); - if (rc != 0) { - int err = errno; - if (close () != 0) - return -1; - errno = err; - return -1; - } - - return 0; - } -#endif - else { - errno = EPROTONOSUPPORT; - return -1; - } + return 0; } int zmq::ipc_listener_t::close () @@ -285,7 +150,6 @@ int zmq::ipc_listener_t::close () return -1; s = retired_fd; -#ifndef ZMQ_HAVE_OPENVMS // If there's an underlying UNIX domain socket, get rid of the file it // is associated with. struct sockaddr_un *su = (struct sockaddr_un*) &addr; @@ -294,7 +158,6 @@ int zmq::ipc_listener_t::close () if (rc != 0) return -1; } -#endif return 0; } @@ -333,19 +196,14 @@ zmq::fd_t zmq::ipc_listener_t::accept () errno_assert (sock != -1); // Set to non-blocking mode. -#ifdef ZMQ_HAVE_OPENVMS - int flags = 1; - int rc = ioctl (sock, FIONBIO, &flags); - errno_assert (rc != -1); -#else int flags = fcntl (s, F_GETFL, 0); if (flags == -1) flags = 0; int rc = fcntl (sock, F_SETFL, flags | O_NONBLOCK); errno_assert (rc != -1); -#endif return sock; } #endif + |