diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-03-12 08:55:54 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-03-12 08:55:54 +0300 |
commit | 071c1dcb64e1ae3dbf63a7e835c2da01c80ec785 (patch) | |
tree | 962c37cba2e522d5d8b879e40ffa0e05c4b3a011 /src | |
parent | Teach web admin about ip acl rules (diff) |
Return 'closed' instead of 'einval' on closed sockets
Diffstat (limited to 'src')
-rw-r--r-- | src/ejabberd_socket.erl | 8 | ||||
-rw-r--r-- | src/xmpp_stream_in.erl | 2 | ||||
-rw-r--r-- | src/xmpp_stream_out.erl | 2 |
3 files changed, 9 insertions, 3 deletions
diff --git a/src/ejabberd_socket.erl b/src/ejabberd_socket.erl index c5c56cd5..e1712be2 100644 --- a/src/ejabberd_socket.erl +++ b/src/ejabberd_socket.erl @@ -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(), diff --git a/src/xmpp_stream_in.erl b/src/xmpp_stream_in.erl index c80fafe0..54168261 100644 --- a/src/xmpp_stream_in.erl +++ b/src/xmpp_stream_in.erl @@ -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); diff --git a/src/xmpp_stream_out.erl b/src/xmpp_stream_out.erl index ecfe1414..3832a75d 100644 --- a/src/xmpp_stream_out.erl +++ b/src/xmpp_stream_out.erl @@ -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); |