You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ri...@apache.org on 2009/10/28 16:29:46 UTC
svn commit: r830584 - in /qpid/branches/0.5.x-dev/qpid/cpp/src/qpid:
client/ConnectionSettings.cpp sys/Socket.h sys/TCPIOPlugin.cpp
sys/posix/Socket.cpp
Author: ritchiem
Date: Wed Oct 28 15:29:46 2009
New Revision: 830584
URL: http://svn.apache.org/viewvc?rev=830584&view=rev
Log:
Fixed tcp nodelay, broken by previous socket code shuffling
Modified:
qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/client/ConnectionSettings.cpp
qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/sys/Socket.h
qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp
qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/sys/posix/Socket.cpp
Modified: qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/client/ConnectionSettings.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/client/ConnectionSettings.cpp?rev=830584&r1=830583&r2=830584&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/client/ConnectionSettings.cpp (original)
+++ qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/client/ConnectionSettings.cpp Wed Oct 28 15:29:46 2009
@@ -47,7 +47,7 @@
void ConnectionSettings::configureSocket(qpid::sys::Socket& socket) const
{
if (tcpNoDelay) {
- socket.setTcpNoDelay(tcpNoDelay);
+ socket.setTcpNoDelay();
QPID_LOG(info, "Set TCP_NODELAY");
}
}
Modified: qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/sys/Socket.h
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/sys/Socket.h?rev=830584&r1=830583&r2=830584&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/sys/Socket.h (original)
+++ qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/sys/Socket.h Wed Oct 28 15:29:46 2009
@@ -45,6 +45,8 @@
/** Set socket non blocking */
void setNonblocking() const;
+ QPID_COMMON_EXTERN void setTcpNoDelay() const;
+
QPID_COMMON_EXTERN void connect(const std::string& host, uint16_t port) const;
QPID_COMMON_EXTERN void connect(const SocketAddress&) const;
@@ -97,8 +99,6 @@
QPID_COMMON_EXTERN int read(void *buf, size_t count) const;
QPID_COMMON_EXTERN int write(const void *buf, size_t count) const;
- QPID_COMMON_EXTERN void setTcpNoDelay(bool nodelay) const;
-
private:
/** Create socket */
void createSocket(const SocketAddress&) const;
@@ -106,6 +106,7 @@
Socket(IOHandlePrivate*);
mutable std::string connectname;
mutable bool nonblocking;
+ mutable bool nodelay;
};
}}
Modified: qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp?rev=830584&r1=830583&r2=830584&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp (original)
+++ qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp Wed Oct 28 15:29:46 2009
@@ -84,7 +84,7 @@
AsynchIOHandler* async = new AsynchIOHandler(s.getPeerAddress(), f);
if (tcpNoDelay) {
- s.setTcpNoDelay(tcpNoDelay);
+ s.setTcpNoDelay();
QPID_LOG(info, "Set TCP_NODELAY on connection to " << s.getPeerAddress());
}
Modified: qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/sys/posix/Socket.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/sys/posix/Socket.cpp?rev=830584&r1=830583&r2=830584&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/sys/posix/Socket.cpp (original)
+++ qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/sys/posix/Socket.cpp Wed Oct 28 15:29:46 2009
@@ -98,12 +98,14 @@
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 @@
try {
if (nonblocking) setNonblocking();
+ if (nodelay) setTcpNoDelay();
} catch (std::exception&) {
::close(s);
socket = -1;
@@ -134,8 +137,21 @@
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 @@
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
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org