Parcourir la source

Define cork() as pure virtual in Socket class

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
Peter Åstrand (astrand) il y a 6 ans
Parent
révision
01dc1a67dc

+ 1
- 0
common/network/Socket.h Voir le fichier

@@ -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;

+ 2
- 2
common/network/TcpSocket.cxx Voir le fichier

@@ -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

+ 1
- 1
common/network/TcpSocket.h Voir le fichier

@@ -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:

+ 4
- 4
common/rfb/VNCSConnectionST.cxx Voir le fichier

@@ -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()

Chargement…
Annuler
Enregistrer