summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/sys/posix/Socket.cpp
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2008-01-18 00:11:27 +0000
committerAlan Conway <aconway@apache.org>2008-01-18 00:11:27 +0000
commitad08b5c6eb216e5f35a10df25220687c51b1de77 (patch)
tree9811250fda91b81c304cd11e02f73f8f04766774 /cpp/src/qpid/sys/posix/Socket.cpp
parent3ba4c0d85c42e4e81e7c0fab673a9267fc98b129 (diff)
downloadqpid-python-ad08b5c6eb216e5f35a10df25220687c51b1de77.tar.gz
Add optional host, port arguments to all example clients.
Verify can start private broker & pass host/port to examples, by default it still uses local host/standard port. Added host:port to Socket error messages. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@613018 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/sys/posix/Socket.cpp')
-rw-r--r--cpp/src/qpid/sys/posix/Socket.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/cpp/src/qpid/sys/posix/Socket.cpp b/cpp/src/qpid/sys/posix/Socket.cpp
index f0cc8cd5a5..6e872c4fbc 100644
--- a/cpp/src/qpid/sys/posix/Socket.cpp
+++ b/cpp/src/qpid/sys/posix/Socket.cpp
@@ -113,6 +113,17 @@ void Socket::setNonblocking() const {
QPID_POSIX_CHECK(::fcntl(impl->fd, F_SETFL, O_NONBLOCK));
}
+namespace {
+const char* h_errstr(int e) {
+ switch (e) {
+ case HOST_NOT_FOUND: return "Host not found";
+ case NO_ADDRESS: return "Name does not have an IP address";
+ case TRY_AGAIN: return "A temporary error occurred on an authoritative name server.";
+ case NO_RECOVERY: return "Non-recoverable name server error";
+ default: return "Unknown error";
+ }
+}
+}
void Socket::connect(const std::string& host, int port) const
{
@@ -123,10 +134,11 @@ void Socket::connect(const std::string& host, int port) const
// TODO: Be good to make this work for IPv6 as well as IPv4
// Use more modern lookup functions
struct hostent* hp = gethostbyname ( host.c_str() );
- if (hp == 0) throw QPID_POSIX_ERROR(errno);
+ if (hp == 0)
+ throw Exception(QPID_MSG("Cannot resolve " << host << ": " << h_errstr(h_errno)));
memcpy(&name.sin_addr.s_addr, hp->h_addr_list[0], hp->h_length);
if (::connect(socket, (struct sockaddr*)(&name), sizeof(name)) < 0)
- throw QPID_POSIX_ERROR(errno);
+ throw qpid::Exception(QPID_MSG(strError(errno) << ": " << host << ":" << port));
}
void