From 50c263d173510ef11c316e405fadbe51dd5fda85 Mon Sep 17 00:00:00 2001 From: wentianxiaokai <819158198@qq.com> Date: Wed, 28 Feb 2018 05:35:45 +0000 Subject: [PATCH 1/3] trigger reconnection when socket broken This commit can fix the problem that old codes do not trigger reconnection when socket broken.The new codes can trigger reconnection when socket broken occur. --- src/mysql_conn.erl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/mysql_conn.erl b/src/mysql_conn.erl index a077598..f581e53 100644 --- a/src/mysql_conn.erl +++ b/src/mysql_conn.erl @@ -17,7 +17,7 @@ %%% Modified: 23 Sep 2006 by Yariv Sadan %%% Added transaction handling and prepared statement execution. %%% -%%% Copyright (c) 2001-2004 Kungliga Tekniska Högskolan +%%% Copyright (c) 2001-2004 Kungliga Tekniska Högskolan %%% See the file COPYING %%% %%% @@ -467,6 +467,8 @@ do_query(Sock, RecvPid, LogFun, Query, Version) -> Msg = io_lib:format("Failed sending data " "on socket : ~p", [Reason]), + gen_tcp:close(Sock), + RecvPid ! {tcp_closed, Sock}, {error, Msg} end. From 7c8f54327f79f1c117e5367886fff7786c828f71 Mon Sep 17 00:00:00 2001 From: wentianxiaokai <819158198@qq.com> Date: Mon, 5 Mar 2018 01:32:06 +0000 Subject: [PATCH 2/3] Update mysql_conn.erl --- src/mysql_conn.erl | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/mysql_conn.erl b/src/mysql_conn.erl index f581e53..821bcb5 100644 --- a/src/mysql_conn.erl +++ b/src/mysql_conn.erl @@ -467,8 +467,6 @@ do_query(Sock, RecvPid, LogFun, Query, Version) -> Msg = io_lib:format("Failed sending data " "on socket : ~p", [Reason]), - gen_tcp:close(Sock), - RecvPid ! {tcp_closed, Sock}, {error, Msg} end. From 94aa33e97ebe0324bb3ee57ee67697f08220f93a Mon Sep 17 00:00:00 2001 From: wentianxiaokai <819158198@qq.com> Date: Mon, 5 Mar 2018 01:37:07 +0000 Subject: [PATCH 3/3] Update mysql_recv.erl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Last solution is a wrong answer.The right answer is to add "erlang:monitor(process, RecvPid)," in mysql_recv.erl:73,after spawn_link()。 This commit can fix the problem that old codes do not trigger reconnection when socket broken.The new codes can trigger reconnection when socket broken occur. --- src/mysql_recv.erl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mysql_recv.erl b/src/mysql_recv.erl index c1e1173..2d89bb8 100644 --- a/src/mysql_recv.erl +++ b/src/mysql_recv.erl @@ -10,7 +10,7 @@ %%% Note : All MySQL code was written by Magnus Ahltorp, originally %%% in the file mysql.erl - I just moved it here. %%% -%%% Copyright (c) 2001-2004 Kungliga Tekniska Högskolan +%%% Copyright (c) 2001-2004 Kungliga Tekniska Högskolan %%% See the file COPYING %%% %%% Signals this receiver process can send to it's parent @@ -75,6 +75,7 @@ start_link(Host, Port, LogFun, Parent) when is_list(Host), is_integer(Port) -> spawn_link(fun () -> init(Host, Port, LogFun, Parent) end), + erlang:monitor(process, RecvPid), %% wait for the socket from the spawned pid receive {mysql_recv, RecvPid, init, {error, E}} ->