Why is TCP splicing disabled in Linux?

Okay, I figured it out, 1.22 refactored the whole zero copy code: net: arrange zero-copy of os.File and TCPConn to UnixConn · Issue #58808 · golang/go · GitHub. The TCPConn will fail on spliceTo, but it will fallback to genericWriteTo, which calls io.Copy again with a TCPConn wrapper without the WriteTo method. So, the zero copy path for TCPConn is ReadFrom instead of WriteTo.