diff --git a/ChangeLog b/ChangeLog index d0818a8b9..2042ff30b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-01-08 Mickael Remond + + * src/ejabberd_listener.erl: Define send timeout option to avoid + blocking on socket send (EJAB-746). + * src/ejabberd_s2s_out.erl: Likewise. + 2009-01-06 Badlop * src/msgs/ru.msg: Fix typo (thanks to Dominges) diff --git a/src/ejabberd_listener.erl b/src/ejabberd_listener.erl index e1dc140f4..ecdeae07b 100644 --- a/src/ejabberd_listener.erl +++ b/src/ejabberd_listener.erl @@ -16,7 +16,7 @@ %%% but WITHOUT ANY WARRANTY; without even the implied warranty of %%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %%% General Public License for more details. -%%% +%%% %%% You should have received a copy of the GNU General Public License %%% along with this program; if not, write to the Free Software %%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA @@ -38,6 +38,9 @@ -include("ejabberd.hrl"). +%% We do not block on send anymore. +-define(TCP_SEND_TIMEOUT, 15000). + start_link() -> supervisor:start_link({local, ejabberd_listeners}, ?MODULE, []). @@ -89,10 +92,11 @@ init(Port, Module, Opts) -> end, Opts), Res = gen_tcp:listen(Port, [binary, - {packet, 0}, + {packet, 0}, {active, false}, {reuseaddr, true}, {nodelay, true}, + {send_timeout, ?TCP_SEND_TIMEOUT}, {keepalive, true} | SockOpts]), case Res of diff --git a/src/ejabberd_s2s_out.erl b/src/ejabberd_s2s_out.erl index 09e446694..0601cdc1a 100644 --- a/src/ejabberd_s2s_out.erl +++ b/src/ejabberd_s2s_out.erl @@ -16,7 +16,7 @@ %%% but WITHOUT ANY WARRANTY; without even the implied warranty of %%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %%% General Public License for more details. -%%% +%%% %%% You should have received a copy of the GNU General Public License %%% along with this program; if not, write to the Free Software %%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA @@ -95,6 +95,9 @@ %% -define(FSMLIMITS, [{max_queue, 2000}]). -define(FSMTIMEOUT, 30000). +%% We do not block on send anymore. +-define(TCP_SEND_TIMEOUT, 15000). + %% Maximum delay to wait before retrying to connect after a failed attempt. %% Specified in miliseconds. Default value is 5 minutes. -define(MAX_RETRY_DELAY, 300000). @@ -251,6 +254,7 @@ open_socket1(Addr, Port) -> catch ejabberd_socket:connect( Addr, Port, [binary, {packet, 0}, + {send_timeout, ?TCP_SEND_TIMEOUT}, {active, false}, inet6]); {'EXIT', Reason1} -> ?DEBUG("s2s_out: connect crashed ~p~n", [Reason1]),