tailscale/wgengine/magicsock
Andrew Dunham e107977f75 wgengine/magicsock: disable SIO_UDP_NETRESET on Windows
By default, Windows sets the SIO_UDP_CONNRESET and SIO_UDP_NETRESET
options on created UDP sockets. These behaviours make the UDP socket
ICMP-aware; when the system gets an ICMP message (e.g. an "ICMP Port
Unreachable" message, in the case of SIO_UDP_CONNRESET), it will cause
the underlying UDP socket to throw an error. Confusingly, this can occur
even on reads, if the same UDP socket is used to write a packet that
triggers this response.

The Go runtime disabled the SIO_UDP_CONNRESET behavior in 3114bd6, but
did not change SIO_UDP_NETRESET–probably because that socket option
isn't documented particularly well.

Various other networking code seem to disable this behaviour, such as
the Godot game engine (godotengine/godot#22332) and the Eclipse TCF
agent (link below). Others appear to work around this by ignoring the
error returned (anacrolix/dht#16, among others).

For now, until it's clear whether this ends up in the upstream Go
implementation or not, let's also disable the SIO_UDP_NETRESET in a
similar manner to SIO_UDP_CONNRESET.

Eclipse TCF agent: https://gitlab.eclipse.org/eclipse/tcf/tcf.agent/-/blob/master/agent/tcf/framework/mdep.c

Updates #10976
Updates golang/go#68614

Signed-off-by: Andrew Dunham <andrew@du.nham.ca>
Change-Id: I70a2f19855f8dec1bfb82e63f6d14fc4a22ed5c3
2024-08-15 12:11:33 -04:00
..
batching_conn_default.go wgengine/magicsock: refactor batchingUDPConn to batchingConn interface (#13042) 2024-08-06 09:00:28 -07:00
batching_conn_linux_test.go wgengine/magicsock: refactor batchingUDPConn to batchingConn interface (#13042) 2024-08-06 09:00:28 -07:00
batching_conn_linux.go wgengine/magicsock: refactor batchingUDPConn to batchingConn interface (#13042) 2024-08-06 09:00:28 -07:00
batching_conn.go wgengine/magicsock: refactor batchingUDPConn to batchingConn interface (#13042) 2024-08-06 09:00:28 -07:00
blockforever_conn.go wgengine/magicsock: improve don't fragment bit set/get support 2023-09-21 04:17:12 -07:00
cloudinfo_nocloud.go wgengine/magicsock: use cloud metadata to get public IPs 2024-08-02 16:05:14 -04:00
cloudinfo_test.go wgengine/magicsock: use cloud metadata to get public IPs 2024-08-02 16:05:14 -04:00
cloudinfo.go wgengine/magicsock: use cloud metadata to get public IPs 2024-08-02 16:05:14 -04:00
debughttp.go all: remove LenIter, use Go 1.22 range-over-int instead 2024-02-25 12:29:45 -08:00
debugknobs_stubs.go wgengine/magicsock: allow a CSV list for pretendpoint 2024-07-10 09:57:28 -07:00
debugknobs.go wgengine/magicsock: allow a CSV list for pretendpoint 2024-07-10 09:57:28 -07:00
derp_test.go net/netcheck,wgengine/magicsock: align DERP frame receive time heuristics 2024-04-05 13:04:42 -07:00
derp.go control/controlknobs,tailcfg,wgengine/magicsock: remove DRPO shutoff switch 2024-07-06 19:50:53 -07:00
discopingpurpose_string.go wgengine/magicsock: implement probing of UDP path lifetime (#10844) 2024-01-23 09:37:32 -08:00
endpoint_default.go all: adjust some build tags for plan9 2023-08-24 15:42:35 -07:00
endpoint_stub.go all: adjust some build tags for plan9 2023-08-24 15:42:35 -07:00
endpoint_test.go wgengine/magicsock: implement probing of UDP path lifetime (#10844) 2024-01-23 09:37:32 -08:00
endpoint_tracker_test.go all: use Go 1.22 range-over-int 2024-04-16 15:32:38 -07:00
endpoint_tracker.go wgengine/magicsock: only cache N most recent endpoints per-Addr 2023-08-15 14:06:42 -07:00
endpoint.go all: use math/rand/v2 more 2024-06-05 15:24:04 -07:00
magicsock_default.go wgengine/magicsock: refactor batchingUDPConn to batchingConn interface (#13042) 2024-08-06 09:00:28 -07:00
magicsock_linux.go cmd/tta, vnet: add host firewall, env var support, more tests 2024-08-12 15:32:12 -07:00
magicsock_notwindows.go wgengine/magicsock: disable SIO_UDP_NETRESET on Windows 2024-08-15 12:11:33 -04:00
magicsock_test.go wgengine/magicsock: refactor batchingUDPConn to batchingConn interface (#13042) 2024-08-06 09:00:28 -07:00
magicsock_unix_test.go all: update copyright and license headers 2023-01-27 15:36:29 -08:00
magicsock_windows.go wgengine/magicsock: disable SIO_UDP_NETRESET on Windows 2024-08-15 12:11:33 -04:00
magicsock.go wgengine/magicsock: disable SIO_UDP_NETRESET on Windows 2024-08-15 12:11:33 -04:00
peermap.go wgengine/magicsock: allow disco communication without known endpoints 2024-04-11 09:29:49 -07:00
peermtu_darwin.go wgengine/magicsock: improve don't fragment bit set/get support 2023-09-21 04:17:12 -07:00
peermtu_linux.go wgengine/magicsock: improve don't fragment bit set/get support 2023-09-21 04:17:12 -07:00
peermtu_stubs.go magicsock: mute noisy expected peer mtu related error (#10870) 2024-01-19 20:04:22 -05:00
peermtu_unix.go wgengine/magicsock: replace CanPMTUD() with ShouldPMTUD() 2023-09-21 04:17:12 -07:00
peermtu.go magicsock: mute noisy expected peer mtu related error (#10870) 2024-01-19 20:04:22 -05:00
rebinding_conn.go wgengine/magicsock: refactor batchingUDPConn to batchingConn interface (#13042) 2024-08-06 09:00:28 -07:00