]> source.dussan.org Git - tigervnc.git/commitdiff
Define cork() as pure virtual in Socket class
authorPeter Åstrand (astrand) <astrand@cendio.se>
Tue, 10 Oct 2017 10:56:04 +0000 (12:56 +0200)
committerPeter Åstrand (astrand) <astrand@cendio.se>
Wed, 8 Nov 2017 09:40:12 +0000 (10:40 +0100)
This makes it possible to create a derived class from Socket which is
not TCP based, without having VNCSConnectionST.cxx trying to call
setsockopt() on a non-socket.

common/network/Socket.h
common/network/TcpSocket.cxx
common/network/TcpSocket.h
common/rfb/VNCSConnectionST.cxx

index 874a59cd2917ddda05c85094cb06c6fbd3e6b8b3..7a30cacf796d5672807f4d46007a7312d2e285e3 100644 (file)
@@ -50,6 +50,7 @@ namespace network {
     // if shutdown() is overridden then the override MUST call on to here
     virtual void shutdown() {isShutdown_ = true;}
     bool isShutdown() const {return isShutdown_;}
+    virtual bool cork(bool enable) = 0;
 
     // information about this end of the socket
     virtual int getMyPort() = 0;
index cf03c10de7312988fa82d01c6c892ed55e58722a..9603c385f8524b4f27faf8a0e743d3cb64f5363b 100644 (file)
@@ -349,12 +349,12 @@ bool TcpSocket::enableNagles(int sock, bool enable) {
   return true;
 }
 
-bool TcpSocket::cork(int sock, bool enable) {
+bool TcpSocket::cork(bool enable) {
 #ifndef TCP_CORK
   return false;
 #else
   int one = enable ? 1 : 0;
-  if (setsockopt(sock, IPPROTO_TCP, TCP_CORK, (char *)&one, sizeof(one)) < 0)
+  if (setsockopt(getFd(), IPPROTO_TCP, TCP_CORK, (char *)&one, sizeof(one)) < 0)
     return false;
   return true;
 #endif
index a97e6839d771abff896c165cccb3bc56d5149a25..c1b142ff21f08575ed9abe0990a9e97574b60a89 100644 (file)
@@ -62,9 +62,9 @@ namespace network {
     virtual bool sameMachine();
 
     virtual void shutdown();
+    virtual bool cork(bool enable);
 
     static bool enableNagles(int sock, bool enable);
-    static bool cork(int sock, bool enable);
     static bool isListening(int sock);
     static int getSockPort(int sock);
   private:
index d9bb28155255d63413a95ba2603442290f4e064a..2f8889d2b6afbe9f3f72e2c6442bb4440e66ea01 100644 (file)
@@ -168,7 +168,7 @@ void VNCSConnectionST::processMessages()
 
     // Get the underlying TCP layer to build large packets if we send
     // multiple small responses.
-    network::TcpSocket::cork(sock->getFd(), true);
+    sock->cork(true);
 
     while (getInStream()->checkNoWait(1)) {
       if (pendingSyncFence) {
@@ -185,7 +185,7 @@ void VNCSConnectionST::processMessages()
     }
 
     // Flush out everything in case we go idle after this.
-    network::TcpSocket::cork(sock->getFd(), false);
+    sock->cork(false);
 
     inProcessMessages = false;
 
@@ -1093,7 +1093,7 @@ void VNCSConnectionST::writeFramebufferUpdate()
   // mode, we will also have small fence messages around the update. We
   // need to aggregate these in order to not clog up TCP's congestion
   // window.
-  network::TcpSocket::cork(sock->getFd(), true);
+  sock->cork(true);
 
   // First take care of any updates that cannot contain framebuffer data
   // changes.
@@ -1102,7 +1102,7 @@ void VNCSConnectionST::writeFramebufferUpdate()
   // Then real data (if possible)
   writeDataUpdate();
 
-  network::TcpSocket::cork(sock->getFd(), false);
+  sock->cork(false);
 }
 
 void VNCSConnectionST::writeNoDataUpdate()