Skip to content

Commit f8845db

Browse files
authored
Merge pull request #9 from Zectbumo/process_more
respond can send more data than 64k
2 parents a5253dd + f7d4dbf commit f8845db

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

src/fastcgi/server.nim

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,10 +143,20 @@ proc respond*(req: Request, content = "", headers: HttpHeaders = nil, appStatus:
143143
if content.len > 0:
144144
payload.add(&"\c\L{content}")
145145

146-
var header = initHeader(FCGI_STDOUT, req.id, payload.len, 0)
147-
await req.client.send(addr header, FCGI_HEADER_LENGTH)
148-
if payload.len > 0:
149-
await req.client.send(payload.cstring, payload.len)
146+
var header = initHeader(FCGI_STDOUT, req.id, -1, 0)
147+
var sent = 0
148+
var remaining = payload.len
149+
150+
while remaining > 0:
151+
let chunkLen = min(remaining, FCGI_MAX_LENGTH)
152+
header.contentLengthB1 = uint8((chunkLen shr 8) and 0xff)
153+
header.contentLengthB0 = uint8(chunkLen and 0xff)
154+
await req.client.send(addr header, FCGI_HEADER_LENGTH)
155+
await req.client.send(addr payload[sent], chunkLen)
156+
sent.inc(chunkLen)
157+
remaining.dec(chunkLen)
158+
159+
if sent > 0:
150160
header.contentLengthB1 = 0
151161
header.contentLengthB0 = 0
152162
await req.client.send(addr header, FCGI_HEADER_LENGTH)

0 commit comments

Comments
 (0)