TODO items. o use real entropy to make random (ID, port) numbers more random. o in production mode, do not free memory on exit. In debug mode, test leaks. o profile memory allocation, and if performance issues, use special memory allocator. For example, with caches per thread. o #define BIT_... different on bigendian and smallendian systems so that the htons on flags is not needed to send a message from the cache. o possible optimization with delayed malloc of msgreply after parse (reuse parse structures and ptrs to packet in meantime). o possible optimization, so that precious id number resource is not depleted by parsing of messages. Delay malloc, as above, or try to reverse release special id numbers, and if you release the next_id number for the thread it reuses that id number. o use rbtree to compress domain names in messages, sorted AXFRs of 16Kb and so on. For current packets, even worstcase, list, is ok. Only if we start to send out compressed AXFRs then it becomes a problem. We can cap AXFR packets on 256 or 1024 domain names, for example. o speed up pkt domain name decompression loop detection using counter perhaps.