summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOmar Roth <omarroth@protonmail.com>2019-06-26 14:44:06 -0500
committerOmar Roth <omarroth@protonmail.com>2019-06-26 14:44:06 -0500
commitebfd7d21535cfcf30daf578e86028d49087af517 (patch)
treec9475259687bd4d7d801db2b2000827adf4f8c95
parent818cd2454de4d6ea20d4ac2765a7d4e4083eecd9 (diff)
downloadinvidious-ebfd7d21535cfcf30daf578e86028d49087af517.tar.gz
invidious-ebfd7d21535cfcf30daf578e86028d49087af517.tar.bz2
invidious-ebfd7d21535cfcf30daf578e86028d49087af517.zip
Push potential fix for #578
-rw-r--r--src/invidious/helpers/handlers.cr24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/invidious/helpers/handlers.cr b/src/invidious/helpers/handlers.cr
index 216f9b5d..4494b854 100644
--- a/src/invidious/helpers/handlers.cr
+++ b/src/invidious/helpers/handlers.cr
@@ -224,4 +224,28 @@ class HTTP::Client
response
end
+
+ # See https://github.com/crystal-lang/crystal/issues/7843
+ private def socket
+ socket = @socket
+ return socket if socket
+
+ hostname = @host.starts_with?('[') && @host.ends_with?(']') ? @host[1..-2] : @host
+ socket = TCPSocket.new hostname, @port, @dns_timeout, @connect_timeout
+ socket.read_timeout = @read_timeout if @read_timeout
+ socket.sync = false
+
+ {% if !flag?(:without_openssl) %}
+ if tls = @tls
+ _socket = socket
+ begin
+ socket = OpenSSL::SSL::Socket::Client.new(socket, context: tls, sync_close: true, hostname: @host)
+ rescue
+ _socket.close
+ end
+ end
+ {% end %}
+
+ @socket = socket
+ end
end