]> Cypherpunks repositories - gostls13.git/commit
net: use closesocket when closing socket os.File's on Windows
authorqmuntal <quimmuntal@gmail.com>
Tue, 13 May 2025 11:31:22 +0000 (13:31 +0200)
committerQuim Muntal <quimmuntal@gmail.com>
Thu, 15 May 2025 05:21:50 +0000 (22:21 -0700)
commit3be537e663c39ead4c82ca4047d248ff66e132c3
treed327fe1acb95e9f29bf48078a54cf81436cb3cb8
parenta197a471b9c67af4881e0d9c48e4bd3cff4992c2
net: use closesocket when closing socket os.File's on Windows

The WSASocket documentation states that the returned socket must be
closed by calling closesocket instead of CloseHandle. The different
File methods on the net package return an os.File that is not aware
that it should use closesocket. Ideally, os.NewFile should detect that
the passed handle is a socket and use the appropriate close function,
but there is no reliable way to detect that a handle is a socket on
Windows (see CL 671455).

To work around this, we add a hidden function to the os package that
can be used to return an os.File that uses closesocket. This approach
is the same as used on Unix, which also uses a hidden function for other
purposes.

While here, fix a potential issue with FileConn, which was using File.Fd
rather than File.SyscallConn to get the handle. This could result in the
File being closed and garbage collected before the syscall was made.

Fixes #73683.

Change-Id: I179405f34c63cbbd555d8119e0f77157c670eb3e
Reviewed-on: https://go-review.googlesource.com/c/go/+/672195
Reviewed-by: Damien Neil <dneil@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
src/internal/poll/fd_windows.go
src/net/fd_windows.go
src/net/file_test.go
src/net/file_windows.go
src/os/file_windows.go