From d49fe57776e6d19181c8ccb8d5332ed2c62d5ca8 Mon Sep 17 00:00:00 2001 From: V Date: Fri, 27 Aug 2021 06:08:09 +0200 Subject: Root commit Co-authored-by: edef --- listener.go | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 listener.go (limited to 'listener.go') diff --git a/listener.go b/listener.go new file mode 100644 index 0000000..a4fd692 --- /dev/null +++ b/listener.go @@ -0,0 +1,58 @@ +// SPDX-FileCopyrightText: V +// SPDX-FileCopyrightText: edef +// SPDX-License-Identifier: OSL-3.0 + +package main + +import ( + "fmt" + "net" + + "github.com/coreos/go-systemd/v22/activation" +) + +type listenAddress string + +func (a listenAddress) Listeners() ([]net.Listener, error) { + ln, err := net.Listen("tcp", string(a)) + if err != nil { + return nil, err + } + return []net.Listener{ln}, nil +} + +func (a listenAddress) Get() interface{} { + return string(a) +} + +func (a *listenAddress) Set(v string) error { + *a = listenAddress(v) + return nil +} + +func (a listenAddress) String() string { + return string(a) +} + +type activationSocket struct{} + +func (activationSocket) Listeners() (lns []net.Listener, err error) { + files := activation.Files(true) + lns = make([]net.Listener, len(files)) + for i, f := range files { + lns[i], err = net.FileListener(f) + if err != nil { + return nil, err + } + f.Close() + } + return +} + +func (activationSocket) String() string { + return "activation socket" +} + +func (activationSocket) Set(string) error { + return fmt.Errorf("incompatible with socket activation") +} -- cgit 1.4.1