diff options
| author | Andrew Stitcher <astitcher@apache.org> | 2011-08-17 22:07:36 +0000 |
|---|---|---|
| committer | Andrew Stitcher <astitcher@apache.org> | 2011-08-17 22:07:36 +0000 |
| commit | 724affbbb66158e3694f9ebcf2918c37825702b7 (patch) | |
| tree | 055e6793e63297e23cf5d8f7fd057abb7fe5b329 /cpp/src/qpid/sys/posix/Socket.cpp | |
| parent | 7290e2a3ad86697ea804fe673f46dfae37ba958f (diff) | |
| download | qpid-python-724affbbb66158e3694f9ebcf2918c37825702b7.tar.gz | |
NO-JIRA: Tidy up the Socket/SocketAddress code:
- Move (almost) all knowledge of difference in address types to SocketAddress
- Make the Windows and Posix sockets code more similar with the aim of
eliminating differences in the future
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1158934 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/sys/posix/Socket.cpp')
| -rw-r--r-- | cpp/src/qpid/sys/posix/Socket.cpp | 39 |
1 files changed, 13 insertions, 26 deletions
diff --git a/cpp/src/qpid/sys/posix/Socket.cpp b/cpp/src/qpid/sys/posix/Socket.cpp index 0ec5688d07..4a6dc66f80 100644 --- a/cpp/src/qpid/sys/posix/Socket.cpp +++ b/cpp/src/qpid/sys/posix/Socket.cpp @@ -34,9 +34,6 @@ #include <netdb.h> #include <cstdlib> #include <string.h> -#include <iostream> - -#include <boost/format.hpp> namespace qpid { namespace sys { @@ -44,38 +41,28 @@ namespace sys { namespace { std::string getName(int fd, bool local) { - ::sockaddr_storage name; // big enough for any socket address - ::socklen_t namelen = sizeof(name); + ::sockaddr_storage name_s; // big enough for any socket address + ::sockaddr* name = (::sockaddr*)&name_s; + ::socklen_t namelen = sizeof(name_s); - int result = -1; if (local) { - result = ::getsockname(fd, (::sockaddr*)&name, &namelen); + QPID_POSIX_CHECK( ::getsockname(fd, name, &namelen) ); } else { - result = ::getpeername(fd, (::sockaddr*)&name, &namelen); + QPID_POSIX_CHECK( ::getpeername(fd, name, &namelen) ); } - QPID_POSIX_CHECK(result); - - char servName[NI_MAXSERV]; - char dispName[NI_MAXHOST]; - if (int rc=::getnameinfo((::sockaddr*)&name, namelen, dispName, sizeof(dispName), - servName, sizeof(servName), - NI_NUMERICHOST | NI_NUMERICSERV) != 0) - throw QPID_POSIX_ERROR(rc); - return std::string(dispName) + ":" + std::string(servName); + + return SocketAddress::asString(name, namelen); } uint16_t getLocalPort(int fd) { - ::sockaddr_storage name; - ::socklen_t namelen = sizeof(name); - if (::getsockname(fd, (::sockaddr*)&name, &namelen) < 0) - throw QPID_POSIX_ERROR(errno); + ::sockaddr_storage name_s; // big enough for any socket address + ::sockaddr* name = (::sockaddr*)&name_s; + ::socklen_t namelen = sizeof(name_s); - switch (name.ss_family) { - case AF_INET: return ntohs(((::sockaddr_in&)name).sin_port); - case AF_INET6: return ntohs(((::sockaddr_in6&)name).sin6_port); - default:throw Exception(QPID_MSG("Unexpected socket type")); - } + QPID_POSIX_CHECK( ::getsockname(fd, name, &namelen) ); + + return SocketAddress::getPort(name); } } |
