There is a problem with the VSocket::ReadExact function that uses a 50 microseconds timeout when it calls select() in a loop, waiting for something to receive or send. Result is that a very heavy load is put on the CPU when a client is connected.
IMHO, a value of 50 *milliseconds* is much more suitable. I personnaly use 100 ms and it performs quite well.
Fix:
Replace
tm.tv_usec = 50;
by
tm.tv_usec = 50 * 1000;
or
tm.tv_usec = 100 * 1000;
to let the CPU breathe.
Hope this helped.
Remi