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