{"record":{"id":"8b55e39b4f55456e","repo":"crowdsecurity/crowdsec","slug":"could-not-resolve-addr-s-w","errorCode":null,"errorMessage":"could not resolve addr %s: %w","messagePattern":"could not resolve addr (.+?): %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/acquisition/modules/syslog/internal/server/syslogserver.go","lineNumber":27,"sourceCode":"\n\tlog \"github.com/sirupsen/logrus\"\n)\n\ntype SyslogServer struct {\n\tconn          *net.UDPConn\n\tLogger        *log.Entry\n\tMaxMessageLen int\n}\n\ntype SyslogMessage struct {\n\tMessage []byte\n\tClient  string\n}\n\nfunc (s *SyslogServer) Listen(listenAddr string, port int) error {\n\tudpAddr, err := net.ResolveUDPAddr(\"udp\", net.JoinHostPort(listenAddr, strconv.Itoa(port)))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"could not resolve addr %s: %w\", listenAddr, err)\n\t}\n\n\tudpConn, err := net.ListenUDP(\"udp\", udpAddr)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"could not listen on port %d: %w\", port, err)\n\t}\n\n\ts.Logger.Debugf(\"listening on %s:%d\", listenAddr, port)\n\ts.conn = udpConn\n\n\treturn nil\n}\n\nfunc (s *SyslogServer) Serve(ctx context.Context, msgChan chan SyslogMessage) error {\n\tgo func() {\n\t\t<-ctx.Done()\n\t\t// closing the socket unblocks ReadFrom()\n\t\ts.conn.Close()","sourceCodeStart":9,"sourceCodeEnd":45,"githubUrl":"https://github.com/crowdsecurity/crowdsec/blob/909b5157986a2b2c2163300fdaef5ed01289f7d2/pkg/acquisition/modules/syslog/internal/server/syslogserver.go#L9-L45","documentation":"SyslogServer.Listen failed to resolve the UDP address before binding. net.ResolveUDPAddr on \"udp\" <addr:port> errors when the host part is not a valid IP or a resolvable hostname, or when the port is not numeric. The wrapped underlying error names the exact cause.","triggerScenarios":"Stream() calls srv.Listen(addr, port) with a listenAddr that is a non-resolvable hostname, an empty string, or a port that is 0/negative producing an invalid JoinHostPort result.","commonSituations":"Config passed Validate with a resolvable-looking but broken DNS name and DNS is down; listen_addr empty because it bypassed validation; IPv6 literal mishandled; /etc/hosts issues in containers.","solutions":["Set listen_addr to a valid IP literal (e.g. 0.0.0.0) in the syslog acquisition config.","Check the wrapped error for DNS failures and fix name resolution (resolv.conf, /etc/hosts).","Ensure the port is a valid integer 1-65535 so JoinHostPort produces 'addr:port'."],"exampleFix":"// before\nlisten_addr: myhost.internal  # DNS broken\n\n// after\nlisten_addr: 0.0.0.0","handlingStrategy":"validation","validationCode":"if _, err := net.ResolveUDPAddr(\"udp\", net.JoinHostPort(addr, strconv.Itoa(port))); err != nil {\n    return fmt.Errorf(\"unresolvable syslog listen address %s:%d: %w\", addr, port, err)\n}","typeGuard":null,"tryCatchPattern":"if err := srv.Listen(addr, port); err != nil {\n    var dnsErr *net.DNSError\n    if errors.As(err, &dnsErr) {\n        // fall back to IP literal or fix DNS\n    }\n    return err\n}","preventionTips":["Prefer IP literals over hostnames for listen addresses.","Ensure DNS (/etc/resolv.conf, /etc/hosts) works in the deployment environment.","Log the joined host:port before resolving when debugging."],"tags":["network","udp","dns","syslog"],"backgroundTag":"address-resolution-failed","analyzedSha":"909b5157986a2b2c2163300fdaef5ed01289f7d2","analyzedAt":"2026-09-06T12:27:26.012Z","contentChangedAt":"2026-09-06T12:27:26.012Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}