Просмотр исходного кода

Catch SSL shutdown errors when closing clients

Zed 6 лет назад
Родитель
Сommit
ee43d8cfb1
3 измененных файлов с 11 добавлено и 3 удалено
  1. 3 1
      src/api/utils.nim
  2. 1 1
      src/routes/media.nim
  3. 7 1
      src/routes/router_utils.nim

+ 3 - 1
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.} =

+ 1 - 1
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

+ 7 - 1
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()