Catch SSL shutdown errors when closing clients
This commit is contained in:
		
							parent
							
								
									b09798f2cf
								
							
						
					
					
						commit
						ee43d8cfb1
					
				| 
						 | 
				
			
			@ -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.} =
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue