code: func (s *Socket) Read(timeout ...time.Duration) (string, error) {
  	return s.mainChannel.Read(timeout...)
  }
docs: // Read the next message from the socket. This method is blocking.
  // One variadic argument sets a timeout duration.
  // If no timeout is specified, this method will block forever.
  // ErrSocketClosed is returned, if the socket connection is closed.
  // ErrReadTimeout is returned, if the timeout is reached.