Previously, TestNotTemporaryRead issued the Read on the Accept side of the connection, and Closed the Dial side. It appears that on some platforms, Dial may return before the connection has been Accepted, and if that connection is immediately closed with no bytes written and SO_LINGER set to 0, the connection may no longer even exist by the time Accept returns, causing Accept to block indefinitely until the Listener is closed. If we were to just swap the directions, we would have an analogous problem: Accept could accept the connection and close it before the client even finishes dialing, causing Dial (instead of Read) to return the ECONNRESET error. Here, we take a middle path: we Accept and Dial the connection concurrently, but wait until both the Accept and the Dial have returned (indicating that the connection is completely established and won't vanish from the accept queue) before resetting the connection. Fixes #29685 Updates #25289 Change-Id: Ida06f70f7205fffcdafa3df78bd56184e6cec760 Reviewed-on: https://go-review.googlesource.com/c/go/+/385314 Trust: Bryan Mills <bcmills@google.com> Run-TryBot: Bryan Mills <bcmills@google.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Emmanuel Odeke <emmanuel@orijtech.com> TryBot-Result: Gopher Robot <gobot@golang.org> |
||
|---|---|---|
| .github | ||
| api | ||
| doc | ||
| lib/time | ||
| misc | ||
| src | ||
| test | ||
| .gitattributes | ||
| .gitignore | ||
| AUTHORS | ||
| CONTRIBUTING.md | ||
| CONTRIBUTORS | ||
| LICENSE | ||
| PATENTS | ||
| README.md | ||
| SECURITY.md | ||
| codereview.cfg | ||
README.md
The Go Programming Language
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
Gopher image by Renee French, licensed under Creative Commons 3.0 Attributions license.
Our canonical Git repository is located at https://go.googlesource.com/go. There is a mirror of the repository at https://github.com/golang/go.
Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file.
Download and Install
Binary Distributions
Official binary distributions are available at https://golang.org/dl/.
After downloading a binary release, visit https://golang.org/doc/install for installation instructions.
Install From Source
If a binary distribution is not available for your combination of operating system and architecture, visit https://golang.org/doc/install/source for source installation instructions.
Contributing
Go is the work of thousands of contributors. We appreciate your help!
To contribute, please read the contribution guidelines at https://golang.org/doc/contribute.
Note that the Go project uses the issue tracker for bug reports and proposals only. See https://golang.org/wiki/Questions for a list of places to ask questions about the Go language.