The selector triggers when a subsequent read operation is guaranteed not to block. This means that even if you don't read all the received data in one go, wait() will still return immediately if called after that. It will keep doing so until you completely emptied out the socket receive buffer after which it would block as usual.
TcpSocket::receive(), as stated clearly in the documentation, takes a size parameter which indicates the "Maximum number of bytes that can be received". It doesn't have to be able to fit all the data in it at once, and this was never the idea. Think of the socket buffer like a std::deque, you pop data from the front and new data is pushed in the back. Nothing is lost unless you yourself throw it away.