aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ssl/src
diff options
context:
space:
mode:
authorRory Byrne <[email protected]>2010-03-28 22:02:41 +0100
committerBjörn Gustavsson <[email protected]>2010-04-07 11:52:13 +0200
commit0e502e41948e8835920ce82bb84405b141a00eaa (patch)
tree1e6e686fd81acec6689d1d6187fba529653d57cf /lib/ssl/src
parent6fd69d6ca5cea3aae4afce7544ba6b729221885c (diff)
downloadotp-0e502e41948e8835920ce82bb84405b141a00eaa.tar.gz
otp-0e502e41948e8835920ce82bb84405b141a00eaa.tar.bz2
otp-0e502e41948e8835920ce82bb84405b141a00eaa.zip
Fix ssl:transport_accept/2 to return properly when socket is closed
A badmatch exception is thrown from ssl:transport_accept/2 when ssl:close/1 is called on the socket. This fixes it to return {error,closed} as expected.
Diffstat (limited to 'lib/ssl/src')
-rw-r--r--lib/ssl/src/ssl.erl26
1 files changed, 15 insertions, 11 deletions
diff --git a/lib/ssl/src/ssl.erl b/lib/ssl/src/ssl.erl
index 965e40a109..da5f750762 100644
--- a/lib/ssl/src/ssl.erl
+++ b/lib/ssl/src/ssl.erl
@@ -154,17 +154,21 @@ transport_accept(#sslsocket{pid = {ListenSocket, #config{cb=CbInfo, ssl=SslOpts}
EmOptions = emulated_options(),
{ok, InetValues} = inet:getopts(ListenSocket, EmOptions),
{CbModule,_,_} = CbInfo,
- {ok, Socket} = CbModule:accept(ListenSocket, Timeout),
- inet:setopts(Socket, internal_inet_values()),
- {ok, Port} = inet:port(Socket),
- case ssl_connection_sup:start_child([server, "localhost", Port, Socket,
- {SslOpts, socket_options(InetValues)}, self(),
- CbInfo]) of
- {ok, Pid} ->
- CbModule:controlling_process(Socket, Pid),
- {ok, SslSocket#sslsocket{pid = Pid}};
- {error, Reason} ->
- {error, Reason}
+ case CbModule:accept(ListenSocket, Timeout) of
+ {ok, Socket} ->
+ inet:setopts(Socket, internal_inet_values()),
+ {ok, Port} = inet:port(Socket),
+ ConnArgs = [server, "localhost", Port, Socket,
+ {SslOpts, socket_options(InetValues)}, self(), CbInfo],
+ case ssl_connection_sup:start_child(ConnArgs) of
+ {ok, Pid} ->
+ CbModule:controlling_process(Socket, Pid),
+ {ok, SslSocket#sslsocket{pid = Pid}};
+ {error, Reason} ->
+ {error, Reason}
+ end;
+ {error, Reason} ->
+ {error, Reason}
end;
transport_accept(#sslsocket{} = ListenSocket, Timeout) ->