ReturnCode receive(IOBuffer &buffer) { MSS_BEGIN(ReturnCode); MSS(state == Connected, InvalidState); MSS(!buffer.full()); auto nrReceived = ::recv(fid, buffer.freeData(), buffer.freeSize(), 0); MSS(nrReceived != -1, CouldNotReceive); if (nrReceived == 0) { //Peer closed connection changeState(Closed); MSS_Q(ReturnCode::ConnectionWasClosed); } else MSS(buffer.scrollEnd(nrReceived)); MSS_END(); }