Author: astitcher
Date: Thu May 26 20:38:43 2011
New Revision: 1128067

URL: http://svn.apache.org/viewvc?rev=1128067&view=rev
Log:
NO-JIRA: Add cached localname as well as peername to Socket

Modified:
    qpid/trunk/qpid/cpp/src/qpid/sys/Socket.h
    qpid/trunk/qpid/cpp/src/qpid/sys/posix/Socket.cpp
    qpid/trunk/qpid/cpp/src/qpid/sys/windows/Socket.cpp

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/Socket.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/Socket.h?rev=1128067&r1=1128066&r2=1128067&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/Socket.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/Socket.h Thu May 26 20:38:43 2011
@@ -93,7 +93,8 @@ private:
     void createSocket(const SocketAddress&) const;
 
     Socket(IOHandlePrivate*);
-    mutable std::string connectname;
+    mutable std::string localname;
+    mutable std::string peername;
     mutable bool nonblocking;
     mutable bool nodelay;
 };

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/posix/Socket.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/posix/Socket.cpp?rev=1128067&r1=1128066&r2=1128067&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/posix/Socket.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/posix/Socket.cpp Thu May 26 20:38:43 2011
@@ -122,7 +122,7 @@ void Socket::connect(const std::string& 
 
 void Socket::connect(const SocketAddress& addr) const
 {
-    connectname = addr.asString();
+    peername = addr.asString();
 
     createSocket(addr);
 
@@ -130,7 +130,7 @@ void Socket::connect(const SocketAddress
     // TODO the correct thing to do here is loop on failure until you've used 
all the returned addresses
     if ((::connect(socket, getAddrInfo(addr).ai_addr, 
getAddrInfo(addr).ai_addrlen) < 0) &&
         (errno != EINPROGRESS)) {
-        throw Exception(QPID_MSG(strError(errno) << ": " << connectname));
+        throw Exception(QPID_MSG(strError(errno) << ": " << peername));
     }
     // When connecting to a port on the same host which no longer has
     // a process associated with it, the OS occasionally chooses the
@@ -147,7 +147,7 @@ void Socket::connect(const SocketAddress
     //
     if (getLocalAddress() == getPeerAddress()) {
         close();
-        throw Exception(QPID_MSG("Connection refused: " << connectname));
+        throw Exception(QPID_MSG("Connection refused: " << peername));
     }
 }
 
@@ -190,8 +190,11 @@ int Socket::listen(const SocketAddress& 
 Socket* Socket::accept() const
 {
     int afd = ::accept(impl->fd, 0, 0);
-    if ( afd >= 0)
-        return new Socket(new IOHandlePrivate(afd));
+    if ( afd >= 0) {
+        Socket* s = new Socket(new IOHandlePrivate(afd));
+        s->localname = localname;
+        return s;
+    }
     else if (errno == EAGAIN)
         return 0;
     else throw QPID_POSIX_ERROR(errno);
@@ -209,15 +212,18 @@ int Socket::write(const void *buf, size_
 
 std::string Socket::getPeerAddress() const
 {
-    if (connectname.empty()) {
-        connectname = getName(impl->fd, false);
+    if (peername.empty()) {
+        peername = getName(impl->fd, false);
     }
-    return connectname;
+    return peername;
 }
 
 std::string Socket::getLocalAddress() const
 {
-    return getName(impl->fd, true);
+    if (localname.empty()) {
+        localname = getName(impl->fd, true);
+    }
+    return localname;
 }
 
 int Socket::getError() const

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/windows/Socket.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/windows/Socket.cpp?rev=1128067&r1=1128066&r2=1128067&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/windows/Socket.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/windows/Socket.cpp Thu May 26 20:38:43 2011
@@ -178,7 +178,7 @@ Socket::connect(const SocketAddress& add
         addrs = addrs->ai_next;
     }
     if (error)
-        throw qpid::Exception(QPID_MSG(strError(error) << ": " << 
connectname));
+        throw qpid::Exception(QPID_MSG(strError(error) << ": " << peername));
 }
 
 void
@@ -241,14 +241,16 @@ Socket* Socket::accept() const
 
 std::string Socket::getPeerAddress() const
 {
-    if (!connectname.empty())
-        connectname = getName(impl->fd, false);
-    return connectname;
+    if (peername.empty())
+        peername = getName(impl->fd, false);
+    return peername;
 }
 
 std::string Socket::getLocalAddress() const
 {
-    return getName(impl->fd, true);
+    if (localname.empty())
+        localname = getName(impl->fd, true);
+    return localname;
 }
 
 int Socket::getError() const



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscr...@qpid.apache.org

Reply via email to