From: Mateusz Poliwczak Date: Tue, 20 Feb 2024 17:15:51 +0000 (+0000) Subject: net: mention the cgo thread limit in package docs X-Git-Tag: go1.23rc1~1185 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=5a412045046586d35488c34fd3ce21ef0960ce44;p=gostls13.git net: mention the cgo thread limit in package docs Updates #63978 Change-Id: I39a5c812b4f604baf4ca5ffcff52b8dc17d4990d GitHub-Last-Rev: 4ab6e262f4fd37ff32d6b3eb756fea187e5d6e53 GitHub-Pull-Request: golang/go#63990 Reviewed-on: https://go-review.googlesource.com/c/go/+/539361 Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Auto-Submit: Ian Lance Taylor Reviewed-by: Roland Shoemaker --- diff --git a/src/net/net.go b/src/net/net.go index c434c96bf8..387f2bb14d 100644 --- a/src/net/net.go +++ b/src/net/net.go @@ -46,8 +46,8 @@ It can use a pure Go resolver that sends DNS requests directly to the servers listed in /etc/resolv.conf, or it can use a cgo-based resolver that calls C library routines such as getaddrinfo and getnameinfo. -By default the pure Go resolver is used, because a blocked DNS request consumes -only a goroutine, while a blocked C call consumes an operating system thread. +On Unix the pure Go resolver is preferred over the cgo resolver, because a blocked DNS +request consumes only a goroutine, while a blocked C call consumes an operating system thread. When cgo is available, the cgo-based resolver is used instead under a variety of conditions: on systems that do not let programs make direct DNS requests (OS X), when the LOCALDOMAIN environment variable is present (even if empty), @@ -57,6 +57,10 @@ when /etc/resolv.conf or /etc/nsswitch.conf specify the use of features that the Go resolver does not implement, and when the name being looked up ends in .local or is an mDNS name. +On all systems (except Plan 9), when the cgo resolver is being used +this package applies a concurrent cgo lookup limit to prevent the system +from running out of system threads. Currently, it is limited to 500 concurrent lookups. + The resolver decision can be overridden by setting the netdns value of the GODEBUG environment variable (see package runtime) to go or cgo, as in: