summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-03-12 08:55:54 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-03-12 08:55:54 +0300
commit071c1dcb64e1ae3dbf63a7e835c2da01c80ec785 (patch)
tree962c37cba2e522d5d8b879e40ffa0e05c4b3a011 /src
parentTeach 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.erl8
-rw-r--r--src/xmpp_stream_in.erl2
-rw-r--r--src/xmpp_stream_out.erl2
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);