{"record":{"id":"12936ad1c04a8f1d","repo":"ipfs/kubo","slug":"servehttpapi-socket-activation-failed-s","errorCode":null,"errorMessage":"serveHTTPApi: socket activation failed: %s","messagePattern":"serveHTTPApi: socket activation failed: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/ipfs/kubo/daemon.go","lineNumber":814,"sourceCode":"\t\t}\n\t}\n\tif len(errs) != 0 {\n\t\treturn errors.Join(errs...)\n\t}\n\n\treturn nil\n}\n\n// serveHTTPApi collects options, creates listener, prints status message and starts serving requests.\nfunc serveHTTPApi(req *cmds.Request, cctx *oldcmds.Context) (<-chan error, error) {\n\tcfg, err := cctx.GetConfig()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"serveHTTPApi: GetConfig() failed: %s\", err)\n\t}\n\n\tlisteners, err := sockets.TakeListeners(\"io.ipfs.api\")\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"serveHTTPApi: socket activation failed: %s\", err)\n\t}\n\n\tapiAddrs := make([]string, 0, 2)\n\tapiAddr, _ := req.Options[commands.ApiOption].(string)\n\tif apiAddr == \"\" {\n\t\tapiAddrs = cfg.Addresses.API\n\t} else {\n\t\tapiAddrs = append(apiAddrs, apiAddr)\n\t}\n\n\tlistenerAddrs := make(map[string]bool, len(listeners))\n\tfor _, listener := range listeners {\n\t\tlistenerAddrs[string(listener.Multiaddr().Bytes())] = true\n\t}\n\n\tfor _, addr := range apiAddrs {\n\t\tapiMaddr, err := ma.NewMultiaddr(addr)\n\t\tif err != nil {","sourceCodeStart":796,"sourceCodeEnd":832,"githubUrl":"https://github.com/ipfs/kubo/blob/329838acdfafae224582930457efe80aa217afc0/cmd/ipfs/kubo/daemon.go#L796-L832","documentation":"With systemd socket activation, serveHTTPApi tries to inherit pre-opened listeners under the name \"io.ipfs.api\" via sockets.TakeListeners; if the activation layer fails it aborts API setup with this wrapped error.","triggerScenarios":"`ipfs daemon` launched under systemd/socket activation where FD_LISTEN environment/FDs are inconsistent, or sockets.ActivationListener cannot find/match the io.ipfs.api descriptors.","commonSituations":"Running the daemon under systemd with socket units misconfigured; stale FDs after service restart; launching with socket-activation env vars set outside systemd.","solutions":["Start the daemon without socket activation (unset LISTEN_FDS/LISTEN_PID) to see if normal mode works","Fix the systemd .socket unit so its file descriptor name/count matches the io.ipfs.api expectation","Restart the service cleanly so systemd re-passes fresh listeners","Disable socket activation and let kubo bind Addresses.API itself"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"// detect socket-activation environment\nif os.Getenv(\"LISTEN_FDS\") != \"\" && !runningUnderSystemd() {\n    // unset LISTEN_FDS/LISTEN_PID to avoid TakeListeners(\"io.ipfs.api\") failures\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only use socket activation with a properly configured systemd socket unit","Restart services cleanly so FDs are re-passed","Fall back to plain listen mode when activation env vars are stale"],"tags":["ipfs","kubo","socket-activation","systemd","api"],"backgroundTag":"socket-activation-failed","analyzedSha":"329838acdfafae224582930457efe80aa217afc0","analyzedAt":"2026-09-03T18:30:52.135Z","contentChangedAt":"2026-09-03T18:30:52.135Z","schemaVersion":2},"datasetVersion":"2026-09-11T00:17:11.886Z"}