Commit fc6ef0eb authored by Simon Giesecke's avatar Simon Giesecke Committed by Simon Giesecke

Problem: zmq::get_peer_ip_address duplicates code from get_socket_address

Solution: change to use get_socket_address
parent 2f7a4502
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include "err.hpp" #include "err.hpp"
#include "macros.hpp" #include "macros.hpp"
#include "config.hpp" #include "config.hpp"
#include "address.hpp"
#if !defined ZMQ_HAVE_WINDOWS #if !defined ZMQ_HAVE_WINDOWS
#include <fcntl.h> #include <fcntl.h>
...@@ -145,39 +146,28 @@ void zmq::enable_ipv4_mapping (fd_t s_) ...@@ -145,39 +146,28 @@ void zmq::enable_ipv4_mapping (fd_t s_)
int zmq::get_peer_ip_address (fd_t sockfd_, std::string &ip_addr_) int zmq::get_peer_ip_address (fd_t sockfd_, std::string &ip_addr_)
{ {
int rc;
struct sockaddr_storage ss; struct sockaddr_storage ss;
#if defined ZMQ_HAVE_HPUX || defined ZMQ_HAVE_WINDOWS \ zmq_socklen_t addrlen =
|| defined ZMQ_HAVE_VXWORKS get_socket_address (sockfd_, socket_end_remote, &ss);
int addrlen = static_cast<int> (sizeof ss);
#else if (addrlen == 0) {
socklen_t addrlen = sizeof ss;
#endif
rc = getpeername (sockfd_, reinterpret_cast<struct sockaddr *> (&ss),
&addrlen);
#ifdef ZMQ_HAVE_WINDOWS #ifdef ZMQ_HAVE_WINDOWS
if (rc == SOCKET_ERROR) {
const int last_error = WSAGetLastError (); const int last_error = WSAGetLastError ();
wsa_assert (last_error != WSANOTINITIALISED && last_error != WSAEFAULT wsa_assert (last_error != WSANOTINITIALISED && last_error != WSAEFAULT
&& last_error != WSAEINPROGRESS && last_error != WSAEINPROGRESS
&& last_error != WSAENOTSOCK); && last_error != WSAENOTSOCK);
return 0; #elif !defined(TARGET_OS_IPHONE) || !TARGET_OS_IPHONE
}
#else
if (rc == -1) {
#if !defined(TARGET_OS_IPHONE) || !TARGET_OS_IPHONE
errno_assert (errno != EBADF && errno != EFAULT && errno != ENOTSOCK); errno_assert (errno != EBADF && errno != EFAULT && errno != ENOTSOCK);
#else #else
errno_assert (errno != EFAULT && errno != ENOTSOCK); errno_assert (errno != EFAULT && errno != ENOTSOCK);
#endif #endif
return 0; return 0;
} }
#endif
char host[NI_MAXHOST]; char host[NI_MAXHOST];
rc = getnameinfo (reinterpret_cast<struct sockaddr *> (&ss), addrlen, host, int rc = getnameinfo (reinterpret_cast<struct sockaddr *> (&ss), addrlen,
sizeof host, NULL, 0, NI_NUMERICHOST); host, sizeof host, NULL, 0, NI_NUMERICHOST);
if (rc != 0) if (rc != 0)
return 0; return 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment