+ if(address->ss_len == ban->address.ss_family) {
+ if (ban->address.ss_family == AF_INET) {
+ memcpy(banAddressBytes, &((struct sockaddr_in *)&ban->address)->sin_addr, 4);
+ } else {
+ memcpy(banAddressBytes, &((struct sockaddr_in6 *)&ban->address)->sin6_addr, 16);
+ }
+
+ banMaskBits[0] <<= (ban->mask >= 64) ? 0 : 64 - ban->mask;
+ banMaskBits[1] <<= (ban->mask > 64) ? 128 - ban->mask : 64;
+
+ clientAddressBytes[0] &= banMaskBits[0];
+ clientAddressBytes[1] &= banMaskBits[1];
+
+ banAddressBytes[0] &= banMaskBits[0];
+ banAddressBytes[1] &= banMaskBits[1];
+
+ if (memcmp(clientAddressBytes, banAddressBytes, 16) == 0) {
+ return true;
+ }
+