code: func (pf *PortForwarder) getListener(protocol string, hostname string, port *ForwardedPort) (net.Listener, error) {
  	listener, err := net.Listen(protocol, fmt.Sprintf("%s:%d", hostname, port.Local))
  	if err != nil {
  		util.HandleError(fmt.Errorf("Unable to create listener: Error %s", err))
  		return nil, err
  	}
  	listenerAddress := listener.Addr().String()
  	host, localPort, _ := net.SplitHostPort(listenerAddress)
  	localPortUInt, err := strconv.ParseUint(localPort, 10, 16)
  
  	if err != nil {
  		return nil, fmt.Errorf("Error parsing local port: %s from %s (%s)", err, listenerAddress, host)
  	}
  	port.Local = uint16(localPortUInt)
  	glog.Infof("Forwarding from %s:%d -> %d", hostname, localPortUInt, port.Remote)
  
  	return listener, nil
  }
docs: // getListener creates a listener on the interface targeted by the given hostname on the given port with
  // the given protocol. protocol is in net.Listen style which basically admits values like tcp, tcp4, tcp6