Enable SO_NO_CHECK if available to skip UDP checksum on packet send for slight performance improvement. We do our own cryptographically secure authentication so UDP checksum is worthless.

This commit is contained in:
Adam Ierymenko 2015-07-28 10:29:25 -07:00
parent 1537109514
commit 40d5c79b62
5 changed files with 14 additions and 6 deletions

View File

@ -232,7 +232,7 @@ unsigned int Http::_do(
handler.error = false;
handler.done = false;
Phy<HttpPhyHandler *> phy(&handler,true);
Phy<HttpPhyHandler *> phy(&handler,true,true);
bool instantConnect = false;
handler.phy = &phy;

View File

@ -144,7 +144,7 @@ private:
fd_set _readfds;
fd_set _writefds;
#if defined(_WIN32) || defined(_WIN64)
fd_set _exceptfds;
fd_set _exceptfds;
#endif
long _nfds;
@ -152,13 +152,15 @@ private:
ZT_PHY_SOCKFD_TYPE _whackSendSocket;
bool _noDelay;
bool _noCheck;
public:
/**
* @param handler Pointer of type HANDLER_PTR_TYPE to handler
* @param noDelay If true, disable TCP NAGLE algorithm on TCP sockets
* @param noCheck If true, attempt to set UDP SO_NO_CHECK option to disable sending checksums
*/
Phy(HANDLER_PTR_TYPE handler,bool noDelay) :
Phy(HANDLER_PTR_TYPE handler,bool noDelay,bool noCheck) :
_handler(handler)
{
FD_ZERO(&_readfds);
@ -202,6 +204,7 @@ public:
_whackReceiveSocket = pipes[0];
_whackSendSocket = pipes[1];
_noDelay = noDelay;
_noCheck = noCheck;
}
~Phy()
@ -296,6 +299,11 @@ public:
#endif
#ifdef IP_MTU_DISCOVER
f = 0; setsockopt(s,IPPROTO_IP,IP_MTU_DISCOVER,&f,sizeof(f));
#endif
#ifdef SO_NO_CHECK
if (_noCheck) {
f = 1; setsockopt(s,SOL_SOCKET,SO_NO_CHECK,(void *)&f,sizeof(f));
}
#endif
}
#endif // Windows or not

View File

@ -696,7 +696,7 @@ static int testPhy()
std::cout << "[phy] Creating phy endpoint..." << std::endl;
TestPhyHandlers testPhyHandlers;
testPhyInstance = new Phy<TestPhyHandlers *>(&testPhyHandlers,false);
testPhyInstance = new Phy<TestPhyHandlers *>(&testPhyHandlers,false,true);
std::cout << "[phy] Binding UDP listen socket to 127.0.0.1/60002... ";
PhySocket *udpListenSock = testPhyInstance->udpBind((const struct sockaddr *)&bindaddr);

View File

@ -404,7 +404,7 @@ public:
#ifdef ZT_ENABLE_NETWORK_CONTROLLER
_controller((_homePath + ZT_PATH_SEPARATOR_S + ZT1_CONTROLLER_DB_PATH).c_str()),
#endif
_phy(this,false),
_phy(this,false,true),
_overrideRootTopology((overrideRootTopology) ? overrideRootTopology : ""),
_node((Node *)0),
_controlPlane((ControlPlane *)0),

View File

@ -297,7 +297,7 @@ int main(int argc,char **argv)
srand(time((time_t *)0));
TcpProxyService svc;
Phy<TcpProxyService *> phy(&svc,false);
Phy<TcpProxyService *> phy(&svc,false,true);
svc.phy = &phy;
svc.udpPortCounter = 1023;