diff options
author | Dominik Picheta <dominikpicheta@googlemail.com> | 2013-06-21 16:01:31 +0100 |
---|---|---|
committer | Dominik Picheta <dominikpicheta@googlemail.com> | 2013-06-21 16:01:31 +0100 |
commit | 2bb4a853ecef114ce9a5fcf08ea5bc5ffff2aae0 (patch) | |
tree | 86bb49d9aaf0f1cccba4e8490f2d6e6ab24d6637 | |
parent | a1e823b03856c9f0d0b2a713e70f651ea9ad1fea (diff) | |
download | Nim-2bb4a853ecef114ce9a5fcf08ea5bc5ffff2aae0.tar.gz |
Send buffer will be respected now when closing async SCGI clients.
-rw-r--r-- | lib/pure/scgi.nim | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/lib/pure/scgi.nim b/lib/pure/scgi.nim index 57fa0b144..8e45032c8 100644 --- a/lib/pure/scgi.nim +++ b/lib/pure/scgi.nim @@ -175,6 +175,15 @@ proc recvBufferAsync(client: PAsyncClient, L: int): TReadLineResult = if ret == L: 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) = case client.mode of ClientReadChar: @@ -206,7 +215,7 @@ proc handleClientRead(client: PAsyncClient, s: PAsyncScgiState) = client.mode = ClientReadContent else: s.handleRequest(client.c, client.input, client.headers) - if not client.c.isClosed: client.c.close() + checkCloseSocket(client) of ReadPartialLine, ReadDisconnected, ReadNone: return of ClientReadContent: let L = parseInt(client.headers["CONTENT_LENGTH"])-client.input.len @@ -215,11 +224,11 @@ proc handleClientRead(client: PAsyncClient, s: PAsyncScgiState) = case ret of ReadFullLine: s.handleRequest(client.c, client.input, client.headers) - if not client.c.isClosed: client.c.close() + checkCloseSocket(client) of ReadPartialLine, ReadDisconnected, ReadNone: return else: s.handleRequest(client.c, client.input, client.headers) - if not client.c.isClosed: client.c.close() + checkCloseSocket(client) proc handleAccept(sock: PAsyncSocket, s: PAsyncScgiState) = var client: PAsyncSocket |