tfo-go
provides TCP Fast Open support for the net
dialer and listener.
go get github.com/database64128/tfo-go/v2
tfo-go
's Windows support requires extensive usage of //go:linkname
to access Go runtime internals, as there's currently no public API for Windows async IO in the standard library. Unfortunately, the Go team has decided to lock down future uses of linkname, starting with Go 1.23. And our bid to get the linknames we need exempted was partially rejected. Therefore, we had to make the following changes:
- Windows support is gated behind the build tag
tfogo_checklinkname0
when building with Go 1.23 and later. - With Go 1.21 and 1.22,
tfo-go
still provides full Windows support, with or without the build tag. - With Go 1.23 and later, when the build tag is not specified,
tfo-go
only supportslisten
with TFO on Windows. To get full TFO support on Windows, the build tagtfogo_checklinkname0
must be specified along with linker flag-checklinkname=0
to disable the linkname check.