FIXME: this class has the same bug that originally existed in the StringBasedServer - if it
receives fewer than 4 bytes in the first read of a message, it will NOT correctly handle that
(it needs the same workaround in SBS, i.e needs to check if the very first read reads fewer
than 4 bytes, and if so, ignore it, reset one buffer, advance the other, and try again)