diff options
Diffstat (limited to 'src/ranch_ssl.erl')
-rw-r--r-- | src/ranch_ssl.erl | 33 |
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 |