There is an issue in net.Listen which I don't see how to solve.
I want to listen to both tcp4 and tcp6.
If I use "tcp", Golang defaults to ipv4 internally.
If I specify tcp4 the server is serving only ipv4 requests.
If I specify tcp6 the server is serving only ipv6 requests.
I cannot use go routines with srv.Serve - it is not working.
The only way I see this to work is to have two separate
Golang apps running in parallel - one listening to ipv4, the other - to ipv6.
This is very inconvenient and hard to maintain.
Any ideas?
==============================================================
srv := &http.Server{}
//
ln, err1 := net.Listen("tcp", addr+":443")
if err1 != nil {
fmt.Printf("net.Listen(tcp): %s", err1)
}
tlsListener := tls.NewListener(tcpKeepAliveListener{ln.(*net.TCPListener)}, config)
srv.Serve(tlsListener)
//
==============================================================
==============================================================
srv := &http.Server{}
//
ln4, err1 := net.Listen("tcp4", addr+":443")
if err1 != nil {
fmt.Printf("net.Listen(tcp4): %s", err1)
}
tlsListener4 := tls.NewListener(tcpKeepAliveListener{ln4.(*net.TCPListener)}, config)
srv.Serve(tlsListener4)
//
==============================================================
==============================================================
srv := &http.Server{}
//
ln6, err1 := net.Listen("tcp6", addr+":443")
if err1 != nil {
fmt.Printf("net.Listen(tcp6): %s", err1)
}
tlsListener6 := tls.NewListener(tcpKeepAliveListener{ln6.(*net.TCPListener)}, config)
srv.Serve(tlsListener6)
//
==============================================================