Skip to content

Commit e220c8b

Browse files
author
Frank Diebolt
committed
support "gen_tcp:connect" options
1 parent 31c30c9 commit e220c8b

File tree

3 files changed

+30
-12
lines changed

3 files changed

+30
-12
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
# Version 1.0.17
2+
3+
* Support "gen_tcp" connect options (ie. keepalive, send_timeout, sndbuf, recbuf...)
4+
5+
# Version 1.0.16
6+
7+
* Support OTP-23 on travis
8+
19
# Version 1.0.15
210

311
* Fix warnings

src/p1_mysql_conn.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ do_recv(LogFun, RecvPid, SeqNum) when is_function(LogFun);
330330
%% Returns : void() | does not return
331331
%%--------------------------------------------------------------------
332332
init(Host, Port, User, Password, Database, ConnectTimeout, LogFun, Parent, SSLOpts) ->
333-
case p1_mysql_recv:start_link(Host, Port, ConnectTimeout, LogFun, self()) of
333+
case p1_mysql_recv:start_link(Host, Port, ConnectTimeout, LogFun, self(), SSLOpts) of
334334
{ok, RecvPid, Sock0} ->
335335
case mysql_init(Sock0, RecvPid, User, Password, LogFun, SSLOpts) of
336336
{ok, {SockMod, RawSock} = Sock, Version} ->

src/p1_mysql_recv.erl

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@
3131
%%--------------------------------------------------------------------
3232
%% External exports (should only be used by the 'p1_mysql_conn' module)
3333
%%--------------------------------------------------------------------
34-
-export([start_link/5
34+
-export([start_link/5,
35+
start_link/6
3536
]).
3637

3738
-include_lib("kernel/include/inet.hrl").
@@ -56,6 +57,7 @@
5657
%% Port = integer()
5758
%% LogFun = undefined | function() of arity 3
5859
%% Parent = pid(), process that should get received frames
60+
%% Options = [atom() | {atom{}, any{}}] gen_tcp options
5961
%% Descrip.: Start a process that connects to Host:Port and waits for
6062
%% data. When it has received a MySQL frame, it sends it to
6163
%% Parent and waits for the next frame.
@@ -65,11 +67,14 @@
6567
%% Socket = term(), gen_tcp socket
6668
%% Reason = atom() | string()
6769
%%--------------------------------------------------------------------
68-
start_link(Host, Port, ConnectTimeout, LogFun, Parent) when is_list(Host),
70+
start_link(Host, Port, ConnectTimeout, LogFun, Parent) ->
71+
start_link(Host, Port, ConnectTimeout, LogFun, Parent, []).
72+
73+
start_link(Host, Port, ConnectTimeout, LogFun, Parent, Options) when is_list(Host),
6974
is_integer(Port) ->
7075
RecvPid =
7176
spawn_link(fun () ->
72-
init(Host, Port, LogFun, Parent)
77+
init(Host, Port, LogFun, Parent, Options)
7378
end),
7479
%% wait for the socket from the spawned pid
7580
receive
@@ -97,8 +102,8 @@ start_link(Host, Port, ConnectTimeout, LogFun, Parent) when is_list(Host),
97102
%% Descrip.: Connect to Host:Port and then enter receive-loop.
98103
%% Returns : error | never returns
99104
%%--------------------------------------------------------------------
100-
init(Host, Port, LogFun, Parent) ->
101-
case connect(Host, Port) of
105+
init(Host, Port, LogFun, Parent, Options) ->
106+
case connect(Host, Port, Options) of
102107
{ok, Sock} ->
103108
Parent ! {p1_mysql_recv, self(), init, {ok, Sock}},
104109
State = #state{socket = Sock,
@@ -182,22 +187,27 @@ sendpacket(Parent, Data) ->
182187
%%--------------------------------------------------------------------
183188
%% Connecting stuff
184189
%%--------------------------------------------------------------------
185-
connect(Host, Port) ->
190+
connect(Host, Port, Options) ->
186191
case lookup(Host) of
187192
{ok, AddrsFamilies} ->
188-
do_connect(AddrsFamilies, Port, {error, nxdomain});
193+
do_connect(AddrsFamilies, Port, Options, {error, nxdomain});
189194
{error, _} = Err ->
190195
Err
191196
end.
192197

193-
do_connect([{IP, Family}|AddrsFamilies], Port, _Err) ->
194-
case gen_tcp:connect(IP, Port, [binary, {packet, 0}, Family]) of
198+
do_connect([{IP, Family}|AddrsFamilies], Port, Options, _Err) ->
199+
SupportedOptions = inet:options() -- [binary,packet,inet,inet6],
200+
OtherOpts = lists:filter(fun(Opt) ->
201+
OptKey = case Opt of {K, _} -> K; K -> K end,
202+
lists:member(OptKey, SupportedOptions)
203+
end, Options),
204+
case gen_tcp:connect(IP, Port, [binary, {packet, 0}, Family | OtherOpts]) of
195205
{ok, Sock} ->
196206
{ok, Sock};
197207
{error, _} = Err ->
198-
do_connect(AddrsFamilies, Port, Err)
208+
do_connect(AddrsFamilies, Port, Options, Err)
199209
end;
200-
do_connect([], _Port, Err) ->
210+
do_connect([], _Port, _Options, Err) ->
201211
Err.
202212

203213
lookup(Host) ->

0 commit comments

Comments
 (0)