mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-29 04:55:31 +00:00
e107977f75
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 |
||
---|---|---|
.. | ||
batching_conn_default.go | ||
batching_conn_linux_test.go | ||
batching_conn_linux.go | ||
batching_conn.go | ||
blockforever_conn.go | ||
cloudinfo_nocloud.go | ||
cloudinfo_test.go | ||
cloudinfo.go | ||
debughttp.go | ||
debugknobs_stubs.go | ||
debugknobs.go | ||
derp_test.go | ||
derp.go | ||
discopingpurpose_string.go | ||
endpoint_default.go | ||
endpoint_stub.go | ||
endpoint_test.go | ||
endpoint_tracker_test.go | ||
endpoint_tracker.go | ||
endpoint.go | ||
magicsock_default.go | ||
magicsock_linux.go | ||
magicsock_notwindows.go | ||
magicsock_test.go | ||
magicsock_unix_test.go | ||
magicsock_windows.go | ||
magicsock.go | ||
peermap.go | ||
peermtu_darwin.go | ||
peermtu_linux.go | ||
peermtu_stubs.go | ||
peermtu_unix.go | ||
peermtu.go | ||
rebinding_conn.go |