summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/sys/posix
diff options
context:
space:
mode:
authorAndrew Stitcher <astitcher@apache.org>2011-08-12 22:32:25 +0000
committerAndrew Stitcher <astitcher@apache.org>2011-08-12 22:32:25 +0000
commit2ad73b9bb5ec8461e58dbea9d123761a7bf308dc (patch)
tree8ace2518fea6dd55cb87eab7c43d39c47edca2df /cpp/src/qpid/sys/posix
parentcde4e55e47ae031af23746b45981fd0fd3a40cad (diff)
downloadqpid-python-2ad73b9bb5ec8461e58dbea9d123761a7bf308dc.tar.gz
QPID-3406: Get IPv6 working on Windows port
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1157274 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/sys/posix')
-rw-r--r--cpp/src/qpid/sys/posix/Socket.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/cpp/src/qpid/sys/posix/Socket.cpp b/cpp/src/qpid/sys/posix/Socket.cpp
index b6f3b7addd..0ec5688d07 100644
--- a/cpp/src/qpid/sys/posix/Socket.cpp
+++ b/cpp/src/qpid/sys/posix/Socket.cpp
@@ -114,6 +114,20 @@ void Socket::createSocket(const SocketAddress& sa) const
}
}
+Socket* Socket::createSameTypeSocket() const {
+ int& socket = impl->fd;
+ // Socket currently has no actual socket attached
+ if (socket == -1)
+ return new Socket;
+
+ ::sockaddr_storage sa;
+ ::socklen_t salen = sizeof(sa);
+ QPID_POSIX_CHECK(::getsockname(socket, (::sockaddr*)&sa, &salen));
+ int s = ::socket(sa.ss_family, SOCK_STREAM, 0); // Currently only work with SOCK_STREAM
+ if (s < 0) throw QPID_POSIX_ERROR(errno);
+ return new Socket(new IOHandlePrivate(s));
+}
+
void Socket::setNonblocking() const {
int& socket = impl->fd;
nonblocking = true;