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.tags/v1.8.90
@@ -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; |
@@ -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 |
@@ -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: |
@@ -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() |