How do I listen on all* local / loopback* ipv4 /ipv6 interfaces? net.Listen('tcp', ':9999') listens on all interfaces. For my application (oauth token listener) I only want to listen to local / loopback
go doc Net.listen: * if the host in the address parameter is empty or a literal unspecified IP address, Listen listens on all available unicast and anycast IP addresses of the local system.* My current workarounds are not ideal : * implement MultiListener interface with 2 listeners\ * Listen on 2 net.Listen listeners with 2 http.Serve servers Example test with netstat showing the issue. SEE EXAMPLE CODE BELOW # Listen :9999 $ go run . -i all & $ netstat -tulnp |grep v2 tcp6 0 0 :::9999 :::* LISTEN 28107/v2 # listen [127.0.0.1]:9999 $ go run . -i ipv4 & $ netstat -tulnp |grep v2 tcp 0 0 127.0.0.1:9999 0.0.0.0:* LISTEN 29244/v2 # listen [::1]:9999 $ go run . -i ipv6 $ netstat -tulnp |grep v2 tcp6 0 0 ::1:9999 :::* LISTEN 30163/v2 Telnet v4 does not work with v6 listen: $ go run . -i ipv6 $ telnet 127.0.0.1 9999 Trying 127.0.0.1... telnet: Unable to connect to remote host: Connection refused Example Code package main import ( "flag" "fmt" "net" "time" ) func main() { optListen := flag.String("i", "all", "all / ipv6, ipv4") addrMap := map[string]string{ "all": ":9999", "ipv6": "[::1]:9999", "ipv4": "[127.0.0.1]:9999", } flag.Parse() fmt.Printf("Listen: %s\n", *optListen) addr, ok := addrMap[*optListen] if !ok { panic("not found") } if l1, err := net.Listen("tcp", addr); err == nil { fmt.Printf("l1: %s\n", l1.Addr().String()) } else { panic(err) } time.Sleep(30 * time.Second) } -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/b3c32c6f-7af5-4eeb-8702-b01c02273a1fn%40googlegroups.com.