summary refs log tree commit diff stats
path: root/lib/pure/asyncnet.nim
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2016-09-08 08:57:47 +0200
committerGitHub <noreply@github.com>2016-09-08 08:57:47 +0200
commit1f6b2c4d119960c1e0f5bf7791e2c4aa3b4fafb0 (patch)
tree32fdb7a3c8685fae0aedbbadb34267b93dc6eb79 /lib/pure/asyncnet.nim
parent4cb4961f7ca137af216024e1cb7a9754ac62b4ee (diff)
parentcc2a8409e170cb96a3141c9ad8a9077c0c98174f (diff)
downloadNim-1f6b2c4d119960c1e0f5bf7791e2c4aa3b4fafb0.tar.gz
Merge pull request #4733 from cheatfate/asyncssl_and_tests
async: small ssl fix and updated tests
Diffstat (limited to 'lib/pure/asyncnet.nim')
-rw-r--r--lib/pure/asyncnet.nim11
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/pure/asyncnet.nim b/lib/pure/asyncnet.nim
index dbf895d18..334f95baa 100644
--- a/lib/pure/asyncnet.nim
+++ b/lib/pure/asyncnet.nim
@@ -165,9 +165,14 @@ when defineSsl:
       await sendPendingSslData(socket, flags)
     of SSL_ERROR_WANT_READ:
       var data = await recv(socket.fd.AsyncFD, BufferSize, flags)
-      let ret = bioWrite(socket.bioIn, addr data[0], data.len.cint)
-      if ret < 0:
-        raiseSSLError()
+      let length = len(data)
+      if length > 0:
+        let ret = bioWrite(socket.bioIn, addr data[0], data.len.cint)
+        if ret < 0:
+          raiseSSLError()
+      elif length == 0:
+        # connection not properly closed by remote side or connection dropped
+        SSL_set_shutdown(socket.sslHandle, SSL_RECEIVED_SHUTDOWN)
     else:
       raiseSSLError("Cannot appease SSL.")