mirror of
https://github.com/valyala/fasthttp.git
synced 2026-06-17 16:26:47 +03:00
Properly handle the case when servers read data by small chunks
This commit is contained in:
+10
-6
@@ -154,25 +154,28 @@ type fakeServerConn struct {
|
||||
net.TCPConn
|
||||
ln *fakeListener
|
||||
requestsCount int
|
||||
pos int
|
||||
closed uint32
|
||||
}
|
||||
|
||||
func (c *fakeServerConn) Read(b []byte) (int, error) {
|
||||
nn := 0
|
||||
for len(b) > len(c.ln.request) {
|
||||
reqLen := len(c.ln.request)
|
||||
for len(b) > 0 {
|
||||
if c.requestsCount == 0 {
|
||||
if nn == 0 {
|
||||
return 0, io.EOF
|
||||
}
|
||||
return nn, nil
|
||||
}
|
||||
n := copy(b, c.ln.request)
|
||||
pos := c.pos % reqLen
|
||||
n := copy(b, c.ln.request[pos:])
|
||||
b = b[n:]
|
||||
nn += n
|
||||
c.requestsCount--
|
||||
}
|
||||
if nn == 0 {
|
||||
panic("server has too small buffer")
|
||||
c.pos += n
|
||||
if n+pos == reqLen {
|
||||
c.requestsCount--
|
||||
}
|
||||
}
|
||||
return nn, nil
|
||||
}
|
||||
@@ -230,6 +233,7 @@ func (ln *fakeListener) Accept() (net.Conn, error) {
|
||||
c := <-ln.ch
|
||||
c.requestsCount = requestsCount
|
||||
c.closed = 0
|
||||
c.pos = 0
|
||||
|
||||
return c, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user