The main server loop is far too busy, since the select() timeout is only 1 ms. Thus, the main loop is executed a thousand times per second, even when the process should only wait for input and be idle.
In stun.cxx, line 1408 should read something like:
tv.tv_usec = 50000;
instead of
tc.tv_usec = 1000;
That would give 20 loop executions per second at most (which should be more than ever needed).
Patch applied