code: func NewRequest(bufConn io.Reader) (*Request, error) {
  	// Read the version byte
  	header := []byte{0, 0, 0}
  	if _, err := io.ReadAtLeast(bufConn, header, 3); err != nil {
  		return nil, fmt.Errorf("Failed to get command version: %v", err)
  	}
  
  	// Ensure we are compatible
  	if header[0] != socks5Version {
  		return nil, fmt.Errorf("Unsupported command version: %v", header[0])
  	}
  
  	// Read in the destination address
  	dest, err := readAddrSpec(bufConn)
  	if err != nil {
  		return nil, err
  	}
  
  	request := &Request{
  		Version:  socks5Version,
  		Command:  header[1],
  		DestAddr: dest,
  		bufConn:  bufConn,
  	}
  
  	return request, nil
  }
docs: // NewRequest creates a new Request from the tcp connection