45 lines
815 B
Go
45 lines
815 B
Go
// +build !windows
|
|
|
|
package main
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"net"
|
|
"syscall"
|
|
|
|
"github.com/coreos/go-systemd/v22/activation"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
func init() {
|
|
syscall.Umask(0)
|
|
}
|
|
|
|
func listenFD(addr string, tlsConfig *tls.Config) (net.Listener, error) {
|
|
var (
|
|
err error
|
|
listeners []net.Listener
|
|
)
|
|
// socket activation
|
|
if tlsConfig != nil {
|
|
listeners, err = activation.TLSListeners(tlsConfig)
|
|
} else {
|
|
listeners, err = activation.Listeners()
|
|
}
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if len(listeners) == 0 {
|
|
return nil, errors.New("no sockets found via socket activation: make sure the service was started by systemd")
|
|
}
|
|
|
|
// default to first fd
|
|
if addr == "" {
|
|
return listeners[0], nil
|
|
}
|
|
|
|
//TODO: systemd fd selection (default is 3)
|
|
return nil, errors.New("not supported yet")
|
|
}
|