summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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