Golang crypto/tls.Listen and NewListener functions example
package crypto/tls
Listen creates a TLS listener accepting connections on the given network address using net.Listen. The configuration config must be non-nil and must have at least one certificate.
NewListener creates a Listener which accepts connections from an inner Listener and wraps each connection with Server. The configuration config must be non-nil and must have at least one certificate.
For this example to work, first you need to have pem and key files. On Linux/Unix machines, you can generate the files with openssl
openssl req -new -nodes -x509 -out server.pem -keyout server.key -days 365
Golang Listen() and NewListener() functions usage example
package main
import (
"fmt"
"net"
"os"
"crypto/tls"
"crypto/rand"
)
func main() {
certificate, err := tls.LoadX509KeyPair("server.pem", "server.key")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// For ClientAuth : tls.RequireAnyClientCert. See http://golang.org/pkg/crypto/tls/#ClientAuthType
config := tls.Config{Certificates : []tls.Certificate{certificate}, ClientAuth: tls.RequireAnyClientCert}
config.Rand = rand.Reader
var newnetlistener, netlistener net.Listener
// The network net must be a stream-oriented network: "tcp", "tcp4", "tcp6", "unix" or "unixpacket".
// see http://golang.org/pkg/net/#Listen
var network = "tcp"
var laddr = "0.0.0.0:8000" // laddr = address to listen
netlistener, err = tls.Listen(network, laddr, &config)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println("[Server Status] : Listening")
newnetlistener = tls.NewListener(netlistener, &config) // New Listener
fmt.Println("[Server Status] : New Listener Listening")
for {
conn, err := netlistener.Accept()
newconn, err := newnetlistener.Accept()
if err != nil {
fmt.Println(err)
}
fmt.Printf("[Server Status] : Accepted connection from %s", conn.RemoteAddr())
fmt.Printf("[Server Status] : Accepted connection from %s", newconn.RemoteAddr())
}
}
Output :
[Server Status] : Listening
[Server Status] : New Listener Listening
References :
Advertisement
Something interesting
Tutorials
+17.9k Golang : Qt image viewer example
+18.7k Golang : Implement getters and setters
+9.4k Golang : Terminate-stay-resident or daemonize your program?
+7.8k Golang : Reverse a string with unicode
+12.2k Golang : Get remaining text such as id or filename after last segment in URL path
+30k Golang : Get time.Duration in year, month, week or day
+7.9k Swift : Convert (cast) String to Float
+13.1k Golang : List objects in AWS S3 bucket
+7.5k Golang : Process json data with Jason package
+7.3k Golang : How to iterate a slice without using for loop?
+6.7k Golang : When to use make or new?