diff options
| author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-07-28 10:29:25 -0700 |
|---|---|---|
| committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-07-28 10:29:25 -0700 |
| commit | 40d5c79b62e7ca7f6da7697e720fb0eb49a26125 (patch) | |
| tree | ff211297bf7fed40e1942fb1fc838f4155427cd9 /osdep | |
| parent | 15371095146a45122407719d33bcf339ed0f87bf (diff) | |
| download | infinitytier-40d5c79b62e7ca7f6da7697e720fb0eb49a26125.tar.gz infinitytier-40d5c79b62e7ca7f6da7697e720fb0eb49a26125.zip | |
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.
Diffstat (limited to 'osdep')
| -rw-r--r-- | osdep/Http.cpp | 2 | ||||
| -rw-r--r-- | osdep/Phy.hpp | 12 |
2 files changed, 11 insertions, 3 deletions
diff --git a/osdep/Http.cpp b/osdep/Http.cpp index cd3cf137..d491b062 100644 --- a/osdep/Http.cpp +++ b/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; diff --git a/osdep/Phy.hpp b/osdep/Phy.hpp index ec01625b..5afd715b 100644 --- a/osdep/Phy.hpp +++ b/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() @@ -297,6 +300,11 @@ public: #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 |
