From ee43d8cfb15eea23e8a8a9401edbfca113c0feb6 Mon Sep 17 00:00:00 2001 From: Zed Date: Wed, 1 Jan 2020 17:24:24 +0100 Subject: [PATCH] Catch SSL shutdown errors when closing clients --- src/api/utils.nim | 4 +++- src/routes/media.nim | 2 +- src/routes/router_utils.nim | 8 +++++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/api/utils.nim b/src/api/utils.nim index 0dcee25..96dcec7 100644 --- a/src/api/utils.nim +++ b/src/api/utils.nim @@ -26,7 +26,9 @@ proc genHeaders*(agent: string; referer: Uri; lang=true; template newClient*() {.dirty.} = var client = newAsyncHttpClient() - defer: client.close() + defer: + try: client.close() + except: discard client.headers = headers proc fetchHtml*(url: Uri; headers: HttpHeaders; jsonKey = ""): Future[XmlNode] {.async.} = diff --git a/src/routes/media.nim b/src/routes/media.nim index 779ca3d..182605f 100644 --- a/src/routes/media.nim +++ b/src/routes/media.nim @@ -31,7 +31,7 @@ proc createMediaRouter*(cfg: Config) = let client = newAsyncHttpClient() try: await client.downloadFile($uri, filename) - client.close() + client.safeClose() except HttpRequestError: removeFile(filename) resp Http404 diff --git a/src/routes/router_utils.nim b/src/routes/router_utils.nim index cea1f4f..7e41109 100644 --- a/src/routes/router_utils.nim +++ b/src/routes/router_utils.nim @@ -2,6 +2,8 @@ import strutils, sequtils, asyncdispatch, httpclient import ../utils, ../prefs export utils, prefs +from net import SslError + template cookiePrefs*(): untyped {.dirty.} = getPrefs(request.cookies.getOrDefault("preferences"), cfg) @@ -14,8 +16,12 @@ template refPath*(): untyped {.dirty.} = proc getNames*(name: string): seq[string] = name.strip(chars={'/'}).split(",").filterIt(it.len > 0) +proc safeClose*(client: AsyncHttpClient) = + try: client.close() + except SslError: discard + proc safeFetch*(url: string): Future[string] {.async.} = let client = newAsyncHttpClient() try: result = await client.getContent(url) except: discard - client.close() + client.safeClose()