moved recvfrom to separate thread
(better signal handling, cleaner shutdown on SIGINT/SIGTERM)