mirror of
https://github.com/traefik/traefik.git
synced 2025-05-05 15:33:01 +00:00
45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
//go:build !windows
|
|
|
|
package server
|
|
|
|
import (
|
|
"net"
|
|
|
|
"github.com/coreos/go-systemd/v22/activation"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
func populateSocketActivationListeners() *SocketActivation {
|
|
// We use Files api due to activation not providing method for get PacketConn with names
|
|
files := activation.Files(true)
|
|
sa := &SocketActivation{enabled: false}
|
|
sa.listeners = make(map[string]net.Listener)
|
|
sa.conns = make(map[string]net.PacketConn)
|
|
|
|
if len(files) > 0 {
|
|
sa.enabled = true
|
|
|
|
for _, f := range files {
|
|
if lc, err := net.FileListener(f); err == nil {
|
|
_, ok := sa.listeners[f.Name()]
|
|
if ok {
|
|
log.Error().Str("listenersName", f.Name()).Msg("Socket activation TCP listeners must have one and only one listener per name")
|
|
} else {
|
|
sa.listeners[f.Name()] = lc
|
|
}
|
|
f.Close()
|
|
} else if pc, err := net.FilePacketConn(f); err == nil {
|
|
_, ok := sa.conns[f.Name()]
|
|
if ok {
|
|
log.Error().Str("listenersName", f.Name()).Msg("Socket activation UDP listeners must have one and only one listener per name")
|
|
} else {
|
|
sa.conns[f.Name()] = pc
|
|
}
|
|
f.Close()
|
|
}
|
|
}
|
|
}
|
|
|
|
return sa
|
|
}
|