Skip to content

Commit 96bd45a

Browse files
authored
fix: keepalive state broken (#228)
Signed-off-by: r3inbowari <r3inbowari@gmail.com>
1 parent a052d7f commit 96bd45a

File tree

2 files changed

+15
-33
lines changed

2 files changed

+15
-33
lines changed

speedtest/data_manager.go

Lines changed: 11 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -464,41 +464,20 @@ func (dc *DataChunk) GetParent() Manager {
464464
return dc.manager
465465
}
466466

467-
// WriteTo Used to hook all traffic.
468-
func (dc *DataChunk) WriteTo(w io.Writer) (written int64, err error) {
469-
nw := 0
470-
nr := readChunkSize
471-
for {
472-
dc.manager.runningRW.RLock()
473-
running := dc.manager.running
474-
dc.manager.runningRW.RUnlock()
475-
if !running || dc.remainOrDiscardSize <= 0 {
467+
func (dc *DataChunk) Read(b []byte) (n int, err error) {
468+
if dc.remainOrDiscardSize < readChunkSize {
469+
if dc.remainOrDiscardSize <= 0 {
476470
dc.endTime = time.Now()
477-
return written, io.EOF
478-
}
479-
if dc.remainOrDiscardSize < readChunkSize {
480-
nr = int(dc.remainOrDiscardSize)
481-
nw, err = w.Write((*dc.manager.repeatByte)[:nr])
482-
} else {
483-
nw, err = w.Write(*dc.manager.repeatByte)
484-
}
485-
if err != nil {
486-
return
487-
}
488-
n64 := int64(nw)
489-
written += n64
490-
dc.remainOrDiscardSize -= n64
491-
dc.manager.AddTotalUpload(n64)
492-
if nr != nw {
493-
return written, io.ErrShortWrite
471+
return n, io.EOF
494472
}
473+
n = copy(b, (*dc.manager.repeatByte)[:dc.remainOrDiscardSize])
474+
} else {
475+
n = copy(b, *dc.manager.repeatByte)
495476
}
496-
}
497-
498-
// Please don't call it, only used to wrapped by [io.NopCloser]
499-
// We use [DataChunk.WriteTo] that implements [io.WriterTo] to bypass this function.
500-
func (dc *DataChunk) Read(b []byte) (n int, err error) {
501-
panic("unexpected call: only used to implement the io.Reader")
477+
n64 := int64(n)
478+
dc.remainOrDiscardSize -= n64
479+
dc.manager.AddTotalUpload(n64)
480+
return
502481
}
503482

504483
// calcMAFilter Median-Averaging Filter

speedtest/request.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,17 +185,20 @@ func downloadRequest(ctx context.Context, s *Server, w int) error {
185185

186186
func uploadRequest(ctx context.Context, s *Server, w int) error {
187187
size := ulSizes[w]
188-
dc := s.Context.NewChunk().UploadHandler(int64(size*100-51) * 10)
188+
chunkSize := int64(size*100-51) * 10
189+
dc := s.Context.NewChunk().UploadHandler(chunkSize)
189190
req, err := http.NewRequestWithContext(ctx, http.MethodPost, s.URL, io.NopCloser(dc))
190191
if err != nil {
191192
return err
192193
}
194+
req.ContentLength = chunkSize
193195
dbg.Printf("Len=%d, XulURL: %s\n", req.ContentLength, s.URL)
194196
req.Header.Set("Content-Type", "application/octet-stream")
195197
resp, err := s.Context.doer.Do(req)
196198
if err != nil {
197199
return err
198200
}
201+
_, _ = io.Copy(io.Discard, resp.Body)
199202
defer resp.Body.Close()
200203
return err
201204
}

0 commit comments

Comments
 (0)