diff options
author | V <v@anomalous.eu> | 2021-08-27 06:08:09 +0200 |
---|---|---|
committer | V <v@anomalous.eu> | 2021-08-27 06:08:09 +0200 |
commit | d49fe57776e6d19181c8ccb8d5332ed2c62d5ca8 (patch) | |
tree | e3036d32e318bfaef519c316de7e7f44b9351fef /listener.go | |
download | loxy-trunk.tar.zst |
Co-authored-by: edef <edef@edef.eu>
Diffstat (limited to 'listener.go')
-rw-r--r-- | listener.go | 58 |
1 files changed, 58 insertions, 0 deletions
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 <v@anomalous.eu> +// SPDX-FileCopyrightText: edef <edef@edef.eu> +// 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") +} |