listener.go
func NewDefaultListener(protocol string, lAddr string, skipUPNP bool) Listener {
	// Local listen IP & port
	lAddrIP, lAddrPort := splitHostPort(lAddr)

	// Create listener
	var listener net.Listener
	var err error
	for i := 0; i < tryListenSeconds; i++ {
		listener, err = net.Listen(protocol, lAddr)
		if err == nil {
			break
		} else if i < tryListenSeconds-1 {
			time.Sleep(time.Second * 1)
		}
	}
	if err != nil {
		PanicCrisis(err)
	}
	// Actual listener local IP & port
	listenerIP, listenerPort := splitHostPort(listener.Addr().String())
	log.Info("Local listener", "ip", listenerIP, "port", listenerPort)

	// Determine internal address...
	var intAddr *NetAddress
	intAddr, err = NewNetAddressString(lAddr)
	if err != nil {
		PanicCrisis(err)
	}

	// Determine external address...
	var extAddr *NetAddress
	if !skipUPNP {
		// If the lAddrIP is INADDR_ANY, try UPnP
		if lAddrIP == "" || lAddrIP == "0.0.0.0" {
			extAddr = getUPNPExternalAddress(lAddrPort, listenerPort)
		}
	}
	// Otherwise just use the local address...
	if extAddr == nil {
		extAddr = getNaiveExternalAddress(listenerPort)
	}
	if extAddr == nil {
		PanicCrisis("Could not determine external address!")
	}

	dl := &DefaultListener{
		listener:    listener,
		intAddr:     intAddr,
		extAddr:     extAddr,
		connections: make(chan net.Conn, numBufferedConnections),
	}
	dl.BaseService = *NewBaseService(log, "DefaultListener", dl)
	dl.Start() // Started upon construction
	return dl
}
func NewDefaultListener(protocol string, lAddr string, skipUPNP bool) Listener {
	// Local listen IP & port
	lAddrIP, lAddrPort := splitHostPort(lAddr)

	// Create listener
	var listener net.Listener
	var err error
	for i := 0; i < tryListenSeconds; i++ {
		listener, err = net.Listen(protocol, lAddr)
		if err == nil {
			break
		} else if i < tryListenSeconds-1 {
			time.Sleep(time.Second * 1)
		}
	}
	if err != nil {
		PanicCrisis(err)
	}
	// Actual listener local IP & port
	listenerIP, listenerPort := splitHostPort(listener.Addr().String())
	log.Info("Local listener", "ip", listenerIP, "port", listenerPort)

	// Determine internal address...
	var intAddr *NetAddress
	intAddr, err = NewNetAddressString(lAddr)
	if err != nil {
		PanicCrisis(err)
	}

	// Determine external address...
	var extAddr *NetAddress
	if !skipUPNP {
		// If the lAddrIP is INADDR_ANY, try UPnP
		if lAddrIP == "" || lAddrIP == "0.0.0.0" {
			extAddr = getUPNPExternalAddress(lAddrPort, listenerPort)
		}
	}
	// Otherwise just use the local address...
	if extAddr == nil {
		extAddr = getNaiveExternalAddress(listenerPort)
	}
	if extAddr == nil {
		PanicCrisis("Could not determine external address!")
	}

	dl := &DefaultListener{
		listener:    listener,
		intAddr:     intAddr,
		extAddr:     extAddr,
		connections: make(chan net.Conn, numBufferedConnections),
	}
	dl.BaseService = *NewBaseService(log, "DefaultListener", dl)
	dl.Start() // Started upon construction
	return dl
}
func NewDefaultListener ( protocol string , lAddr string , skipUPNP bool ) Listener { // Local listen IP & port lAddrIP , lAddrPort := splitHostPort ( lAddr ) // Create listener var listener net . Listener var err error for i := 0 ; i < tryListenSeconds ; i ++ { listener , err = net . Listen ( protocol , lAddr ) if err == nil { break } else if i < tryListenSeconds - 1 { time . Sleep ( time . Second * 1 ) } } if err != nil { PanicCrisis ( err ) } // Actual listener local IP & port listenerIP , listenerPort := splitHostPort ( listener . Addr ( ) . String ( ) ) log . Info ( " " , " " , listenerIP , " " , listenerPort ) // Determine internal address... var intAddr * NetAddress intAddr , err = NewNetAddressString ( lAddr ) if err != nil { PanicCrisis ( err ) } // Determine external address... var extAddr * NetAddress if ! skipUPNP { // If the lAddrIP is INADDR_ANY, try UPnP if lAddrIP == " " || lAddrIP == " " { extAddr = getUPNPExternalAddress ( lAddrPort , listenerPort ) } } // Otherwise just use the local address... if extAddr == nil { extAddr = getNaiveExternalAddress ( listenerPort ) } if extAddr == nil { PanicCrisis ( " " ) } dl := & DefaultListener { listener : listener , intAddr : intAddr , extAddr : extAddr , connections : make ( chan net . Conn , numBufferedConnections ) , } dl . BaseService = * NewBaseService ( log , " " , dl ) dl . Start ( ) // Started upon construction return dl }
// skipUPNP: If true, does not try getUPNPExternalAddress()
skipUPNP : If true does not try getUPNPExternalAddress ()