]> granicus.if.org Git - ejabberd/commitdiff
Return 'closed' instead of 'einval' on closed sockets
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Sun, 12 Mar 2017 05:55:54 +0000 (08:55 +0300)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Sun, 12 Mar 2017 05:55:54 +0000 (08:55 +0300)
src/ejabberd_socket.erl
src/xmpp_stream_in.erl
src/xmpp_stream_out.erl

index c5c56cd58c569ebd3a83b23f994d0fdd659435f0..e1712be2ffd416165ad766e83df48636c1b785a2 100644 (file)
@@ -211,14 +211,16 @@ send_trailer(SocketData) when ?is_http_socket(SocketData) ->
 send_trailer(SocketData) ->
     send(SocketData, <<"</stream:stream>">>).
 
--spec send(socket_state(), iodata()) -> ok | {error, inet:posix()}.
+-spec send(socket_state(), iodata()) -> ok | {error, closed | inet:posix()}.
 send(#socket_state{sockmod = SockMod, socket = Socket} = SocketData, Data) ->
     ?DEBUG("(~s) Send XML on stream = ~p", [pp(SocketData), Data]),
-    try SockMod:send(Socket, Data)
+    try SockMod:send(Socket, Data) of
+       {error, einval} -> {error, closed};
+       Result -> Result
     catch _:badarg ->
            %% Some modules throw badarg exceptions on closed sockets
            %% TODO: their code should be improved
-           {error, einval}
+           {error, closed}
     end.
 
 -spec send_xml(socket_state(),
index c80fafe0ea7c53fd200439a2cf9704573127995b..54168261e3067974cbe28e97f3f44442ed60a757 100644 (file)
@@ -1104,6 +1104,8 @@ set_lang(Pkt, _) ->
     Pkt.
 
 -spec format_inet_error(atom()) -> string().
+format_inet_error(closed) ->
+    "connection closed";
 format_inet_error(Reason) ->
     case inet:format_error(Reason) of
        "unknown POSIX error" -> atom_to_list(Reason);
index ecfe141479814df2a0dc923a47ad92a58025254d..3832a75d6ab108916c702193e7ac0ef2a999405e 100644 (file)
@@ -764,6 +764,8 @@ select_lang(Lang, <<"">>) -> Lang;
 select_lang(_, Lang) -> Lang.
 
 -spec format_inet_error(atom()) -> string().
+format_inet_error(closed) ->
+    "connection closed";
 format_inet_error(Reason) ->
     case inet:format_error(Reason) of
        "unknown POSIX error" -> atom_to_list(Reason);