+ TLInetSockAddr4 = packed Record\r
+ family:Word;\r
+ port :Word;\r
+ addr :uint32;\r
+ pad :array [0..7] of byte; //zipplet 20170204 - originally this was 1..8 for some reason\r
+ end;\r
+ \r
+ {$ifdef ipv6}\r
+ TLInetSockAddr6 = packed record\r
+ sin6_family: word;\r
+ sin6_port: word;\r
+ sin6_flowinfo: uint32;\r
+ sin6_addr: tin6_addr;\r
+ sin6_scope_id: uint32;\r
+ end;\r
+ {$endif}\r
+\r
+ //zipplet 20170204: I did not rename the unioned record. We might want to rename this to TLinetSockAddrv\r
+ TinetSockAddrv = packed record\r
+ case integer of\r
+ 0: (InAddr:TLInetSockAddr4);\r
+ {$ifdef ipv6}\r
+ 1: (InAddr6:TLInetSockAddr6);\r
+ {$endif}\r
+ end;\r
+ Pinetsockaddrv = ^Tinetsockaddrv;\r
+\r
+ type\r
+ tsockaddrin=TLInetSockAddr4;\r
+\r
+{\r
+bin IP list code, by beware\r
+while this is really just a string, on the interface side it must be treated\r
+as an opaque var which is passed as "var" when it needs to be modified}\r
+\r
+ tbiniplist=tbufferstring;\r
+\r
+function biniplist_new:tbiniplist;\r
+procedure biniplist_add(var l:tbiniplist;ip:tbinip);\r
+function biniplist_getcount(const l:tbiniplist):integer;\r
+function biniplist_get(const l:tbiniplist;index:integer):tbinip;\r
+procedure biniplist_set(var l:tbiniplist;index:integer;ip:tbinip);\r
+procedure biniplist_setcount(var l:tbiniplist;newlen:integer);\r
+procedure biniplist_free(var l:tbiniplist);\r
+procedure biniplist_addlist(var l:tbiniplist;const l2:tbiniplist);\r
+function biniplist_tostr(const l:tbiniplist):thostname;\r
+function isbiniplist(const l:tbiniplist):boolean;\r
+\r