Skip to content

Commit 56edf53

Browse files
authored
Close sockets on transport errors in Mint.HTTP1 (#416)
Closes #415.
1 parent fe80d7e commit 56edf53

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

lib/mint/http1.ex

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ defmodule Mint.HTTP1 do
445445

446446
def stream(%__MODULE__{socket: socket} = conn, {tag, socket, reason})
447447
when tag in [:tcp_error, :ssl_error] do
448-
handle_error(conn, conn.transport.wrap_error(reason))
448+
handle_transport_error(conn, conn.transport.wrap_error(reason))
449449
end
450450

451451
def stream(%__MODULE__{}, _message) do
@@ -482,7 +482,11 @@ defmodule Mint.HTTP1 do
482482
end
483483
end
484484

485-
defp handle_error(conn, error) do
485+
defp handle_transport_error(conn, error) do
486+
# The socket *should* be closed in this case, but it might not be, so let's still
487+
# close it to make sure.
488+
_ = conn.transport.close(conn.socket)
489+
486490
conn = put_in(conn.state, :closed)
487491
{:error, conn, error, []}
488492
end
@@ -500,7 +504,7 @@ defmodule Mint.HTTP1 do
500504
case conn.transport.recv(conn.socket, byte_count, timeout) do
501505
{:ok, data} -> handle_data(conn, data)
502506
{:error, %Mint.TransportError{reason: :closed}} -> handle_close(conn)
503-
{:error, error} -> handle_error(conn, error)
507+
{:error, error} -> handle_transport_error(conn, error)
504508
end
505509
end
506510

0 commit comments

Comments
 (0)