package main import ( "net" ) // SyslogSocket is a struct eventually containing a net.Listener // ready with messages, and a Path in case the Listener is not present. type SyslogSocket struct { Listener net.Listener Conn net.PacketConn Path string isSocketActivated bool } // Set from command-line func (s *SyslogSocket) Set(v string) error { err := s.getActivationSocket() if err == nil && (s.Conn != nil || s.Listener != nil) { s.isSocketActivated = true } if !s.isSocketActivated { s.Path = v } return nil } func (s *SyslogSocket) String() string { if s.isSocketActivated { return "systemd-provided" } return s.Path } func (s *SyslogSocket) getActivationSocket() error { conns, err := PacketConns() if err == nil && len(conns) > 0 && conns[0] != nil { s.Conn = conns[0] return nil } listeners, err := Listeners() if err != nil { return err } if len(listeners) == 0 { return nil } s.Listener = listeners[0] return nil }