5359edc160de518d8e43fdd3448365c15b912c3c
galt
  Mon Jul 22 11:48:10 2019 -0700
Added ipv6 support. Listening processes us hybrid dual stack feature of OS to simplify implementation and use a single listening socket. Works with both TCP and UDP. Parasol working. geoIp also updated and ready for IPv6. Should be invisible to most users, while providing connections via ipv6 where available. Supports both ipv4 and ipv6.

diff --git src/weblet/bottleneck/bottleneck.c src/weblet/bottleneck/bottleneck.c
index 59df59c..4fae285 100644
--- src/weblet/bottleneck/bottleneck.c
+++ src/weblet/bottleneck/bottleneck.c
@@ -23,31 +23,31 @@
   "bottleneck v2 - A server that helps slow down hyperactive web robots\n"
   "usage:\n"
   "   bottleneck start\n"
   "Start up bottleneck server\n"
   "   bottleneck query ip-address [count] [fraction]\n"
   "Ask bottleneck server how long to wait to service ip-address after imposing\n"
   "the specified fraction of the access penalty (default of 1.0)\n"
   "   bottleneck list\n"
   "List accessing sites\n"
   "   bottleneck set ip-address milliseconds\n"
   "Set current delay for given ip-address\n"
   "options:\n"
   "   -port=XXXX - Use specific tcp/ip port. Default %d.\n"
   "   -host=XXXXX - Use specific host.  Default %s.\n"
   "   -subnet=WWW.XXX.YYY.ZZZ Restrict access to subnet (example 192.168.255.255).\n"
-  "      Also accepts CIDR notation example 192.168.255.255/16\n"
+  "      Supports comma-separated list of IPv4 or IPv6 subnets in CIDR notation, for example 192.168.255.255/16\n"
   "   -penalty=N - Penalty (in milliseconds) for each access, default %d\n"
   "   -recovery=N - Amount to recover (in milliseconds) for each second\n"
   "                 between accesses.  Default %d\n"
   "Note: penalty and recovery if moved from defaults should balance\n"
   "At the default settings, an equilibrium will be achieved when queries\n"
   "are spaced 7.5 seconds apart.  At the default decay value, an accumulated\n"
   "delay of 15 seconds will take 25 minutes of idleness to decay back to zero.\n"
   , port, host, penalty, recovery
   );
 }
 
 static struct optionSpec options[] = {
    {"port", OPTION_INT},
    {"host", OPTION_STRING},
    {"subnet", OPTION_STRING},