1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- 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
- }
|