FIXReader calls sockRead too many times. I think the optimal way here is to have a userspace buffer or stream that is filled in once by a single call to sockRead. Then until the buffer/stream is not empty read op just read from it, not socket. When the socket/buffer is empty, real socket read is called.
Ubuntu 13.10 x64 gcc4.8