Browse Source

Add Transport:shutdown/2

Allows closing the socket in one or two directions.
Loïc Hoguin 11 years ago
parent
commit
c331076bad
4 changed files with 22 additions and 0 deletions
  1. 8 0
      manual/ranch_transport.md
  2. 6 0
      src/ranch_ssl.erl
  3. 6 0
      src/ranch_tcp.erl
  4. 2 0
      src/ranch_transport.erl

+ 8 - 0
manual/ranch_transport.md

@@ -167,6 +167,14 @@ Callbacks
 >
 > This is mainly useful for switching to active or passive mode.
 
+### shutdown(CSocket, How) -> ok | {error, atom()}
+
+> Types:
+>  *  CSocket = any()
+>  *  How = read | write | read_write
+>
+> Immediately close the socket in one or two directions.
+
 ### sockname(CSocket) -> {ok, {IP, Port}} | {error, atom()}
 
 > Types:

+ 6 - 0
src/ranch_ssl.erl

@@ -31,6 +31,7 @@
 -export([controlling_process/2]).
 -export([peername/1]).
 -export([sockname/1]).
+-export([shutdown/2]).
 -export([close/1]).
 
 -type opts() :: [{backlog, non_neg_integer()}
@@ -166,6 +167,11 @@ peername(Socket) ->
 sockname(Socket) ->
 	ssl:sockname(Socket).
 
+-spec shutdown(ssl:sslsocket(), read | write | read_write)
+	-> ok | {error, atom()}.
+shutdown(Socket, How) ->
+	ssl:shutdown(Socket, How).
+
 -spec close(ssl:sslsocket()) -> ok.
 close(Socket) ->
 	ssl:close(Socket).

+ 6 - 0
src/ranch_tcp.erl

@@ -31,6 +31,7 @@
 -export([controlling_process/2]).
 -export([peername/1]).
 -export([sockname/1]).
+-export([shutdown/2]).
 -export([close/1]).
 
 -type opts() :: [{backlog, non_neg_integer()}
@@ -160,6 +161,11 @@ peername(Socket) ->
 sockname(Socket) ->
 	inet:sockname(Socket).
 
+-spec shutdown(inet:socket(), read | write | read_write)
+	-> ok | {error, atom()}.
+shutdown(Socket, How) ->
+	gen_tcp:shutdown(Socket, How).
+
 -spec close(inet:socket()) -> ok.
 close(Socket) ->
 	gen_tcp:close(Socket).

+ 2 - 0
src/ranch_transport.erl

@@ -49,6 +49,8 @@
 	-> {ok, {inet:ip_address(), inet:port_number()}} | {error, atom()}.
 -callback sockname(socket())
 	-> {ok, {inet:ip_address(), inet:port_number()}} | {error, atom()}.
+-callback shutdown(socket(), read | write | read_write)
+	-> ok | {error, atom()}.
 -callback close(socket()) -> ok.
 
 %% A fallback for transports that don't have a native sendfile implementation.