diff options
-rw-r--r-- | src/listensocket.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/listensocket.cpp b/src/listensocket.cpp index 6fa6785bd..e4b568235 100644 --- a/src/listensocket.cpp +++ b/src/listensocket.cpp @@ -134,6 +134,18 @@ void ListenSocketBase::AcceptInternal() else ServerInstance->Logs->Log("SOCKET", DEBUG, "Can't get peername: %s", strerror(errno)); + /* + * This case is the be all and end all patch to catch and nuke 4in6 + * instead of special-casing shit all over the place and wreaking merry + * havoc with crap, instead, we just recreate sockaddr and strip ::ffff: prefix + * if it's a 4in6 IP. + * + * This is, of course, much improved over the older way of handling this + * (pretend it doesn't exist + hack around it -- yes, both were done!) + * + * Big, big thanks to danieldg for his work on this. + * -- w00t + */ static const unsigned char prefix4in6[12] = { 0,0,0,0, 0,0,0,0, 0,0,0xFF,0xFF }; if (!memcmp(prefix4in6, &((const sockaddr_in6*)client)->sin6_addr, 12)) { |