diff options
author | Andrew Stitcher <astitcher@apache.org> | 2009-10-16 18:47:42 +0000 |
---|---|---|
committer | Andrew Stitcher <astitcher@apache.org> | 2009-10-16 18:47:42 +0000 |
commit | 2b04bc6dc46b3f761a239f41032258eb1d345fbf (patch) | |
tree | 407265a44af0f2a05349a56f31f952ab65267819 /cpp/src/qpid/sys/posix/Socket.cpp | |
parent | 47e5f39e966a99dadf39d9fa30a456296442bbb6 (diff) | |
download | qpid-python-2b04bc6dc46b3f761a239f41032258eb1d345fbf.tar.gz |
Fixed tcp nodelay, broken by previous socket code shuffling
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@826031 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 | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/cpp/src/qpid/sys/posix/Socket.cpp b/cpp/src/qpid/sys/posix/Socket.cpp index 840d9d4b2a..7b906f33e8 100644 --- a/cpp/src/qpid/sys/posix/Socket.cpp +++ b/cpp/src/qpid/sys/posix/Socket.cpp @@ -98,12 +98,14 @@ std::string getService(int fd, bool local) Socket::Socket() : IOHandle(new IOHandlePrivate), - nonblocking(false) + nonblocking(false), + nodelay(false) {} Socket::Socket(IOHandlePrivate* h) : IOHandle(h), - nonblocking(false) + nonblocking(false), + nodelay(false) {} void Socket::createSocket(const SocketAddress& sa) const @@ -116,6 +118,7 @@ void Socket::createSocket(const SocketAddress& sa) const try { if (nonblocking) setNonblocking(); + if (nodelay) setTcpNoDelay(); } catch (std::exception&) { ::close(s); socket = -1; @@ -134,8 +137,21 @@ void Socket::setTimeout(const Duration& interval) const void Socket::setNonblocking() const { int& socket = impl->fd; - if (socket != -1) QPID_POSIX_CHECK(::fcntl(socket, F_SETFL, O_NONBLOCK)); nonblocking = true; + if (socket != -1) { + QPID_POSIX_CHECK(::fcntl(socket, F_SETFL, O_NONBLOCK)); + } +} + +void Socket::setTcpNoDelay() const +{ + int& socket = impl->fd; + nodelay = true; + if (socket != -1) { + int flag = 1; + int result = setsockopt(impl->fd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(flag)); + QPID_POSIX_CHECK(result); + } } void Socket::connect(const std::string& host, uint16_t port) const @@ -258,13 +274,4 @@ int Socket::getError() const return result; } -void Socket::setTcpNoDelay(bool nodelay) const -{ - if (nodelay) { - int flag = 1; - int result = setsockopt(impl->fd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(flag)); - QPID_POSIX_CHECK(result); - } -} - }} // namespace qpid::sys |