123456789101112131415161718192021222324252627282930313233343536373839 |
- package main
- import (
- "net"
- "github.com/coreos/go-systemd/activation"
- )
- func Listeners() ([]net.Listener, error) {
- files := activation.Files(false)
- listeners := make([]net.Listener, len(files))
- for i, f := range files {
- if pc, err := net.FileListener(f); err == nil {
- listeners[i] = pc
- f.Close()
- }
- }
- return listeners, nil
- }
- // PacketConns returns a slice containing a net.PacketConn for each matching socket type
- // passed to this process.
- //
- // The order of the file descriptors is preserved in the returned slice.
- // Nil values are used to fill any gaps. For example if systemd were to return file descriptors
- // corresponding with "udp, tcp, udp", then the slice would contain {net.PacketConn, nil, net.PacketConn}
- func PacketConns() ([]net.PacketConn, error) {
- files := activation.Files(false)
- conns := make([]net.PacketConn, len(files))
- for i, f := range files {
- if pc, err := net.FilePacketConn(f); err == nil {
- conns[i] = pc
- f.Close()
- }
- }
- return conns, nil
- }
|