def read(timeout = nil)
      wait_for_data(timeout) if timeout
      MsgVersion.new{ @socket.read msg_version.bytesize }.validate!
      size = MsgSize.new{ @socket.decode msg_size, msg_size.bytes }.validate!.value
      return MsgBody.new{ @socket.decode msg_body, size           }.validate!.value
    end
def read(timeout = nil)
      wait_for_data(timeout) if timeout
      MsgVersion.new{ @socket.read msg_version.bytesize }.validate!
      size = MsgSize.new{ @socket.decode msg_size, msg_size.bytes }.validate!.value
      return MsgBody.new{ @socket.decode msg_body, size           }.validate!.value
    end
Message format (see sanford-protocal.rb):
 |------ 1B -------|------ 4B -------|-- (msg body size)B --|
 | (packed header) | (packed header) | (BSON binary string) |
 |   msg version   |  msg body size  |       msg body       |
 |-----------------|-----------------|----------------------|