Send buffer will be respected now when closing async SCGI clients.
This commit is contained in:
parent
a1e823b038
commit
2bb4a853ec
1 changed files with 12 additions and 3 deletions
|
|
@ -175,6 +175,15 @@ proc recvBufferAsync(client: PAsyncClient, L: int): TReadLineResult =
|
||||||
if ret == L:
|
if ret == L:
|
||||||
return ReadFullLine
|
return ReadFullLine
|
||||||
|
|
||||||
|
proc checkCloseSocket(client: PAsyncClient) =
|
||||||
|
if not client.c.isClosed:
|
||||||
|
if client.c.isSendDataBuffered:
|
||||||
|
client.c.setHandleWrite do (s: PAsyncSocket):
|
||||||
|
if not s.isClosed and not s.isSendDataBuffered:
|
||||||
|
s.close()
|
||||||
|
s.delHandleWrite()
|
||||||
|
else: client.c.close()
|
||||||
|
|
||||||
proc handleClientRead(client: PAsyncClient, s: PAsyncScgiState) =
|
proc handleClientRead(client: PAsyncClient, s: PAsyncScgiState) =
|
||||||
case client.mode
|
case client.mode
|
||||||
of ClientReadChar:
|
of ClientReadChar:
|
||||||
|
|
@ -206,7 +215,7 @@ proc handleClientRead(client: PAsyncClient, s: PAsyncScgiState) =
|
||||||
client.mode = ClientReadContent
|
client.mode = ClientReadContent
|
||||||
else:
|
else:
|
||||||
s.handleRequest(client.c, client.input, client.headers)
|
s.handleRequest(client.c, client.input, client.headers)
|
||||||
if not client.c.isClosed: client.c.close()
|
checkCloseSocket(client)
|
||||||
of ReadPartialLine, ReadDisconnected, ReadNone: return
|
of ReadPartialLine, ReadDisconnected, ReadNone: return
|
||||||
of ClientReadContent:
|
of ClientReadContent:
|
||||||
let L = parseInt(client.headers["CONTENT_LENGTH"])-client.input.len
|
let L = parseInt(client.headers["CONTENT_LENGTH"])-client.input.len
|
||||||
|
|
@ -215,11 +224,11 @@ proc handleClientRead(client: PAsyncClient, s: PAsyncScgiState) =
|
||||||
case ret
|
case ret
|
||||||
of ReadFullLine:
|
of ReadFullLine:
|
||||||
s.handleRequest(client.c, client.input, client.headers)
|
s.handleRequest(client.c, client.input, client.headers)
|
||||||
if not client.c.isClosed: client.c.close()
|
checkCloseSocket(client)
|
||||||
of ReadPartialLine, ReadDisconnected, ReadNone: return
|
of ReadPartialLine, ReadDisconnected, ReadNone: return
|
||||||
else:
|
else:
|
||||||
s.handleRequest(client.c, client.input, client.headers)
|
s.handleRequest(client.c, client.input, client.headers)
|
||||||
if not client.c.isClosed: client.c.close()
|
checkCloseSocket(client)
|
||||||
|
|
||||||
proc handleAccept(sock: PAsyncSocket, s: PAsyncScgiState) =
|
proc handleAccept(sock: PAsyncSocket, s: PAsyncScgiState) =
|
||||||
var client: PAsyncSocket
|
var client: PAsyncSocket
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue