From 396b945d207c8f131e8ac6b4881337967b939f19 Mon Sep 17 00:00:00 2001 From: Alexey Shchepin Date: Mon, 7 May 2007 17:52:35 +0000 Subject: * src/ejabberd_receiver.erl: Workaround for inet_drv bug * src/web/ejabberd_http_poll.erl: Added sockname/1 and peername/1 stubs SVN Revision: 763 --- src/ejabberd_receiver.erl | 19 ++++++++++++++----- src/web/ejabberd_http_poll.erl | 7 +++++++ 2 files changed, 21 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/ejabberd_receiver.erl b/src/ejabberd_receiver.erl index 71a67723e..3b019a08c 100644 --- a/src/ejabberd_receiver.erl +++ b/src/ejabberd_receiver.erl @@ -258,11 +258,20 @@ code_change(_OldVsn, State, _Extra) -> activate_socket(#state{socket = Socket, sock_mod = SockMod}) -> - case SockMod of - gen_tcp -> - inet:setopts(Socket, [{active, once}]); - _ -> - SockMod:setopts(Socket, [{active, once}]) + PeerName = + case SockMod of + gen_tcp -> + inet:setopts(Socket, [{active, once}]), + inet:peername(Socket); + _ -> + SockMod:setopts(Socket, [{active, once}]), + SockMod:peername(Socket) + end, + case PeerName of + {error, _Reason} -> + self() ! {tcp_closed, Socket}; + {ok, _} -> + ok end. process_data(Data, diff --git a/src/web/ejabberd_http_poll.erl b/src/web/ejabberd_http_poll.erl index 01268b817..912865116 100644 --- a/src/web/ejabberd_http_poll.erl +++ b/src/web/ejabberd_http_poll.erl @@ -22,6 +22,7 @@ terminate/3, send/2, setopts/2, + sockname/1, peername/1, controlling_process/2, close/1, process/2]). @@ -76,6 +77,12 @@ setopts({http_poll, FsmRef}, Opts) -> ok end. +sockname(_Socket) -> + {ok, {{0, 0, 0, 0}, 0}}. + +peername(_Socket) -> + {ok, {{0, 0, 0, 0}, 0}}. + controlling_process(_Socket, _Pid) -> ok. -- cgit v1.2.3