aboutsummaryrefslogtreecommitdiffstats
path: root/src/ranch_ssl.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ranch_ssl.erl')
-rw-r--r--src/ranch_ssl.erl33
1 files changed, 12 insertions, 21 deletions
diff --git a/src/ranch_ssl.erl b/src/ranch_ssl.erl
index 097b31c..dc29a18 100644
--- a/src/ranch_ssl.erl
+++ b/src/ranch_ssl.erl
@@ -30,6 +30,7 @@
-export([messages/0]).
-export([listen/1]).
-export([accept/2]).
+-export([accept_ack/2]).
-export([connect/3]).
-export([connect/4]).
-export([recv/3]).
@@ -165,13 +166,18 @@ listen(Opts) ->
%% @see ssl:transport_accept/2
%% @see ssl:ssl_accept/2
-spec accept(ssl:sslsocket(), timeout())
- -> {ok, ssl:sslsocket()} | {error, closed | timeout | atom() | tuple()}.
+ -> {ok, ssl:sslsocket()} | {error, closed | timeout | atom()}.
accept(LSocket, Timeout) ->
- case ssl:transport_accept(LSocket, Timeout) of
- {ok, CSocket} ->
- ssl_accept(CSocket, Timeout);
+ ssl:transport_accept(LSocket, Timeout).
+
+-spec accept_ack(ssl:sslsocket(), timeout()) -> ok.
+accept_ack(CSocket, Timeout) ->
+ case ssl:ssl_accept(CSocket, Timeout) of
+ ok ->
+ ok;
{error, Reason} ->
- {error, Reason}
+ ok = close(CSocket),
+ error(Reason)
end.
%% @private Experimental. Open a connection to the given host and port number.
@@ -209,7 +215,7 @@ send(Socket, Packet) ->
ssl:send(Socket, Packet).
%% @equiv sendfile(Socket, Filename, 0, 0, [])
--spec sendfile(ssl:sslsocket(), file:name_all())
+-spec sendfile(ssl:sslsocket(), file:name_all() | file:fd())
-> {ok, non_neg_integer()} | {error, atom()}.
sendfile(Socket, Filename) ->
sendfile(Socket, Filename, 0, 0, []).
@@ -275,21 +281,6 @@ close(Socket) ->
%% Internal.
-%% This call always times out, either because a numeric timeout value
-%% was given, or because we've decided to use 5000ms instead of infinity.
-%% This value should be reasonable enough for the moment.
--spec ssl_accept(ssl:sslsocket(), timeout())
- -> {ok, ssl:sslsocket()} | {error, {ssl_accept, atom()}}.
-ssl_accept(Socket, infinity) ->
- ssl_accept(Socket, 5000);
-ssl_accept(Socket, Timeout) ->
- case ssl:ssl_accept(Socket, Timeout) of
- ok ->
- {ok, Socket};
- {error, Reason} ->
- {error, {ssl_accept, Reason}}
- end.
-
%% Unfortunately the implementation of elliptic-curve ciphers that has
%% been introduced in R16B01 is incomplete. Depending on the particular
%% client, this can cause the TLS handshake to break during key