-
Notifications
You must be signed in to change notification settings - Fork 18.5k
Description
Go version
go version go1.23.2 darwin/arm64
Output of go env in your module/workspace:
GO111MODULE=''
GOARCH='arm64'
GOBIN=''
GOCACHE='/user/Library/Caches/go-build'
GOENV='/user/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='arm64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/user/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='darwin'
GOPATH='/user/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/user/dev/go/go'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/user/dev/go/go/pkg/tool/darwin_arm64'
GOVCS=''
GOVERSION='go1.23.2'
GODEBUG='httpmuxgo121=0'
GOTELEMETRY='local'
GOTELEMETRYDIR='/user/Library/Application Support/go/telemetry'
GCCGO='gccgo'
GOARM64='v8.0'
AR='ar'
CC='clang'
CXX='clang++'
CGO_ENABLED='1'
GOMOD='/dev/null'
GOWORK='/user/dev/path/to/go.work'
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/_y/<snip>/T/go-build<id>=/tmp/go-build -gno-record-gcc-switches -fno-common'What did you do?
I have a small webserver that serves static files in a testing setup.
What did you see happen?
I'm on go 1.23.2 on macos 14.7 and I'm having issues with the stdlib http.FileServer.
After much of poking around, I found that with the BSD sendfile implementation in internal/poll/sendfile_bsd.go having
the maxSendfileSize set to 4MiB is causing all large file transfers to fail. For example, the following is the curl failure:
...
{ [512 bytes data]
* transfer closed with 361300436 bytes remaining to read
1 350M 1 5567k 0 0 80.7M 0 0:00:04 --:--:-- 0:00:04 81.1M
* Closing connection
curl: (18) transfer closed with 361300436 bytes remaining to read
so all requests are failing with short writes.
If I update the maxSendfileSize to maximum (adopting the change from this commit) I don't observe any failures.
Just setting the maxSendfileSize feels like a hack though (maybe I'm wrong) so I'd appreciate any hints on this behavior.
What did you expect to see?
The sendfile API should be able to send files in their entirety.