{"record":{"id":"f973591d0ca503e6","repo":"valyala/fasthttp","slug":"cannot-enable-tcp-fastopen-qlen-d-s","errorCode":null,"errorMessage":"cannot enable tcp_fastopen(qlen=%d): %s","messagePattern":"cannot enable tcp_fastopen\\(qlen=(.+?)\\): (.+?)","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"tcplisten/tcplisten_linux.go","lineNumber":28,"sourceCode":"\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\tsoReusePort = 0x0F\n\ttcpFastOpen = 0x17\n)\n\nfunc enableDeferAccept(fd int) error {\n\tif err := unix.SetsockoptInt(fd, unix.IPPROTO_TCP, unix.TCP_DEFER_ACCEPT, 1); err != nil {\n\t\treturn fmt.Errorf(\"cannot enable tcp_defer_accept: %s\", err)\n\t}\n\treturn nil\n}\n\nfunc enableFastOpen(fd int) error {\n\tif err := unix.SetsockoptInt(fd, unix.SOL_TCP, tcpFastOpen, fastOpenQlen); err != nil {\n\t\treturn fmt.Errorf(\"cannot enable tcp_fastopen(qlen=%d): %s\", fastOpenQlen, err)\n\t}\n\treturn nil\n}\n\nconst fastOpenQlen = 16 * 1024\n\nfunc soMaxConn() (int, error) {\n\tdata, err := os.ReadFile(soMaxConnFilePath)\n\tif err != nil {\n\t\t// This error may trigger on travis build. Just use SOMAXCONN\n\t\tif os.IsNotExist(err) {\n\t\t\treturn unix.SOMAXCONN, nil\n\t\t}\n\t\treturn -1, err\n\t}\n\ts := strings.TrimSpace(string(data))\n\tn, err := strconv.Atoi(s)\n\tif err != nil || n <= 0 {","sourceCodeStart":10,"sourceCodeEnd":46,"githubUrl":"https://github.com/valyala/fasthttp/blob/c96f600972c6f4a7a30d664257b340ebe9d60124/tcplisten/tcplisten_linux.go#L10-L46","documentation":"tcplisten supports TCP_FASTOPEN via Config{FastOpen: true}; enableFastOpen sets the option with a queue length (fastOpenQlen = 16*1024) on the listening socket. If the kernel rejects setsockopt, the error \"cannot enable tcp_fastopen(qlen=16384)\" is returned to NewListener.","triggerScenarios":"NewListener with Config{FastOpen: true} on Linux where setsockopt(fd, SOL_TCP, TCP_FASTOPEN, 16384) fails — kernel compiled without TCP_FASTOPEN, net.ipv4.tcp_fastopen sysctl disabled (bit 2 for listening sockets), or seccomp blocking the call.","commonSituations":"Cloud images/containers with tcp_fastopen sysctl set to 0 or 1 (client flag only); older kernels (<3.7); sandboxed runtimes without TFO support.","solutions":["Enable the server-side TFO flag: sysctl -w net.ipv4.tcp_fastopen=3","Set Config.FastOpen to false where TFO is unavailable","Verify kernel version >= 3.7 supports TCP_FASTOPEN","Check seccomp/AppArmor policies allow the setsockopt"],"exampleFix":"// before\ncfg := tcplisten.Config{FastOpen: true} // TFO disabled by sysctl\n// after\n// host: sysctl -w net.ipv4.tcp_fastopen=3\ncfg := tcplisten.Config{FastOpen: true}\nln, err := tcplisten.NewListener(cfg, \"tcp\", \":8080\")","handlingStrategy":"fallback","validationCode":"func tcpFastOpenEnabled() bool {\n    data, err := os.ReadFile(\"/proc/sys/net/ipv4/tcp_fastopen\")\n    if err != nil { return false }\n    n, _ := strconv.Atoi(strings.TrimSpace(string(data)))\n    return n&2 != 0 // server-side bit must be set\n}","typeGuard":null,"tryCatchPattern":"cfg := tcplisten.Config{FastOpen: wantFastOpen}\nln, err := tcplisten.NewListener(cfg, \"tcp\", addr)\nif err != nil && strings.Contains(err.Error(), \"tcp_fastopen\") {\n    log.Warn(\"TCP_FASTOPEN unavailable; retrying without it\")\n    cfg.FastOpen = false\n    ln, err = tcplisten.NewListener(cfg, \"tcp\", addr)\n}","preventionTips":["Ensure net.ipv4.tcp_fastopen includes the server bit (value 2 or 3) via sysctl","Check TFO support in the host kernel (>= 3.7) and runtime sandbox","Make FastOpen opt-in per environment instead of hardcoding"],"tags":["linux","tcp","tcp-fastopen","sockopt","sysctl"],"backgroundTag":"tcp-fastopen-unavailable","analyzedSha":"c96f600972c6f4a7a30d664257b340ebe9d60124","analyzedAt":"2026-08-31T22:48:28.265Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}