//go:build !windows package server import ( "os" "os/signal" "syscall" "github.com/eleksir/pekoe/internal/logger" ) // signalSetup configures signal handlers for Unix systems. // Returns a channel that receives incoming signals. func signalSetup() chan os.Signal { sigCh := make(chan os.Signal, 1) signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGUSR1) return sigCh } // handleSignal processes a received signal and returns true if the server should shutdown. func (s *Server) handleSignal(sig os.Signal) bool { switch sig { case syscall.SIGUSR1: // Reopen log files for log rotation if err := logger.Reopen(); err != nil { logger.Error("event=log_reopen_error error=%v", err) } else { logger.Info("event=log_reopened") } return false // Continue listening case syscall.SIGINT, syscall.SIGTERM: // Graceful shutdown logger.Info("event=shutdown signal=%v", sig) return true // Shutdown case syscall.SIGHUP: // Reserved for future config reload functionality logger.Info("event=sighup_ignored message=reload not implemented") return false // Continue listening default: return false } }