{"record":{"id":"b8d8d11ba9d7debc","repo":"vitessio/vitess","slug":"can-t-call-setwritedeadline-for-connwithtimeouts","errorCode":null,"errorMessage":"can't call SetWriteDeadline for ConnWithTimeouts","messagePattern":"can't call SetWriteDeadline for ConnWithTimeouts","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"go/netutil/conn.go","lineNumber":71,"sourceCode":"\tif err := c.Conn.SetWriteDeadline(time.Now().Add(c.writeTimeout)); err != nil {\n\t\treturn 0, err\n\t}\n\treturn c.Conn.Write(b)\n}\n\n// SetDeadline implements the Conn SetDeadline method.\nfunc (c ConnWithTimeouts) SetDeadline(t time.Time) error {\n\tpanic(\"can't call SetDeadline for ConnWithTimeouts\")\n}\n\n// SetReadDeadline implements the Conn SetReadDeadline method.\nfunc (c ConnWithTimeouts) SetReadDeadline(t time.Time) error {\n\tpanic(\"can't call SetReadDeadline for ConnWithTimeouts\")\n}\n\n// SetWriteDeadline implements the Conn SetWriteDeadline method.\nfunc (c ConnWithTimeouts) SetWriteDeadline(t time.Time) error {\n\tpanic(\"can't call SetWriteDeadline for ConnWithTimeouts\")\n}\n","sourceCodeStart":53,"sourceCodeEnd":73,"githubUrl":"https://github.com/vitessio/vitess/blob/01a25a7d176f94613b8d59d799f438380a8760e4/go/netutil/conn.go#L53-L73","documentation":"SetWriteDeadline on ConnWithTimeouts panics by design: write timeouts are enforced inside Write using the configured write timeout, so per-call deadline APIs are unsupported. This stub turns a semantic misuse into an immediate, loud failure.","triggerScenarios":"Calling SetWriteDeadline directly, or giving the conn to libraries that set write deadlines (TLS record writing, HTTP response writing, chunked proxy relays).","commonSituations":"Writing proxy/server code that periodically refreshes write deadlines for slow clients; integrating with frameworks assuming standard net.Conn deadline semantics.","solutions":["Use the underlying plain net.Conn for deadline-based consumers.","Tune the write timeout supplied to WithTimeouts to cover slow-writer cases.","Refactor to a deadline-based conn (drop WithTimeouts) if deadlines are the actual requirement."],"exampleFix":"// before\nconn.SetWriteDeadline(time.Now().Add(10 * time.Second)) // panics\n// after\n// configure once:\nconn := netutil.ConnWithTimeouts{Conn: raw, WriteTimeout: 10 * time.Second}","handlingStrategy":"type-guard","validationCode":"if _, isTimeouts := conn.(netutil.ConnWithTimeouts); isTimeouts {\n    return errors.New(\"use per-call timeouts, not SetWriteDeadline\")\n}","typeGuard":"func isConnWithTimeouts(c net.Conn) bool {\n    _, ok := c.(netutil.ConnWithTimeouts)\n    return ok\n}","tryCatchPattern":"defer func() { if r := recover(); r != nil { err = fmt.Errorf(\"SetWriteDeadline unsupported: %v\", r) } }()","preventionTips":["Encode write timeout in WriteTimeout at conn creation.","Avoid frameworks that refresh write deadlines per request.","Prefer plain conns when deadline semantics are a hard requirement."],"tags":["network","deadline","panic","netutil"],"backgroundTag":"unsupported-deadline-operation","analyzedSha":"01a25a7d176f94613b8d59d799f438380a8760e4","analyzedAt":"2026-09-01T17:28:30.605Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}