mirror of
				https://github.com/traefik/traefik.git
				synced 2025-10-31 00:11:38 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| //go:build !windows
 | |
| 
 | |
| package server
 | |
| 
 | |
| import (
 | |
| 	"net"
 | |
| 
 | |
| 	"github.com/coreos/go-systemd/v22/activation"
 | |
| 	"github.com/rs/zerolog/log"
 | |
| )
 | |
| 
 | |
| func populateSocketActivationListeners() *SocketActivation {
 | |
| 	// We use Files api due to activation not providing method for get PacketConn with names
 | |
| 	files := activation.Files(true)
 | |
| 	sa := &SocketActivation{enabled: false}
 | |
| 	sa.listeners = make(map[string]net.Listener)
 | |
| 	sa.conns = make(map[string]net.PacketConn)
 | |
| 
 | |
| 	if len(files) > 0 {
 | |
| 		sa.enabled = true
 | |
| 
 | |
| 		for _, f := range files {
 | |
| 			if lc, err := net.FileListener(f); err == nil {
 | |
| 				_, ok := sa.listeners[f.Name()]
 | |
| 				if ok {
 | |
| 					log.Error().Str("listenersName", f.Name()).Msg("Socket activation TCP listeners must have one and only one listener per name")
 | |
| 				} else {
 | |
| 					sa.listeners[f.Name()] = lc
 | |
| 				}
 | |
| 				f.Close()
 | |
| 			} else if pc, err := net.FilePacketConn(f); err == nil {
 | |
| 				_, ok := sa.conns[f.Name()]
 | |
| 				if ok {
 | |
| 					log.Error().Str("listenersName", f.Name()).Msg("Socket activation UDP listeners must have one and only one listener per name")
 | |
| 				} else {
 | |
| 					sa.conns[f.Name()] = pc
 | |
| 				}
 | |
| 				f.Close()
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return sa
 | |
| }
 |