Browse Source

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.

pull/1/head
Adam Ierymenko 11 years ago
parent
commit
40d5c79b62
  1. 2
      osdep/Http.cpp
  2. 12
      osdep/Phy.hpp
  3. 2
      selftest.cpp
  4. 2
      service/OneService.cpp
  5. 2
      tcp-proxy/tcp-proxy.cpp

2
osdep/Http.cpp

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

12
osdep/Phy.hpp

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

2
selftest.cpp

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

2
service/OneService.cpp

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

2
tcp-proxy/tcp-proxy.cpp

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

Loading…
Cancel
Save