summaryrefslogtreecommitdiff
path: root/osdep/Phy.hpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-12-09 15:02:42 -0800
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-12-09 15:02:42 -0800
commite506fda3e4d60063541abb46973a0cea0bc8e8b0 (patch)
treea24cf1e35d11c2e59fa21b42e53b6a79f9250287 /osdep/Phy.hpp
parent42da36ba81423340460ddcd62517bf6b35a46fa3 (diff)
downloadinfinitytier-e506fda3e4d60063541abb46973a0cea0bc8e8b0.tar.gz
infinitytier-e506fda3e4d60063541abb46973a0cea0bc8e8b0.zip
Only set SO_NO_CHECK on IPv4 UDP sockets for now due to broken V6 stacks that drop zero checksum UDP packets.
Diffstat (limited to 'osdep/Phy.hpp')
-rw-r--r--osdep/Phy.hpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/osdep/Phy.hpp b/osdep/Phy.hpp
index 84d154a3..2dcda982 100644
--- a/osdep/Phy.hpp
+++ b/osdep/Phy.hpp
@@ -244,14 +244,12 @@ public:
*/
static inline ZT_PHY_SOCKFD_TYPE getDescriptor(PhySocket *s) throw() { return reinterpret_cast<PhySocketImpl *>(s)->sock; }
-
/**
* @param s Socket object
* @return Pointer to user object
*/
static inline void** getuptr(PhySocket *s) throw() { return &(reinterpret_cast<PhySocketImpl *>(s)->uptr); }
-
/**
* Cause poll() to stop waiting immediately
*
@@ -384,7 +382,10 @@ public:
f = 0; setsockopt(s,IPPROTO_IP,IP_MTU_DISCOVER,&f,sizeof(f));
#endif
#ifdef SO_NO_CHECK
- if (_noCheck) {
+ // For now at least we only set SO_NO_CHECK on IPv4 sockets since some
+ // IPv6 stacks incorrectly discard zero checksum packets. May remove
+ // this restriction later once broken stuff dies more.
+ if ((localAddress->sa_family == AF_INET)&&(_noCheck)) {
f = 1; setsockopt(s,SOL_SOCKET,SO_NO_CHECK,(void *)&f,sizeof(f));
}
#endif