From a37f47887adc3243715a2659ee0c01bbcf13c7e0 Mon Sep 17 00:00:00 2001 From: Zaiming Shi Date: Tue, 27 Apr 2021 09:25:12 +0200 Subject: [PATCH] fix(ipv6): add ipv6_probe socket option only when supported ipv6_probe is a socket option supported in EMQ's otp.git fork. If the target hostname has a ipv6 DNS resolution, gen_tcp tries to establish a connection on ipv6. If it fails, then a fallback to default gen_tcp:connection --- apps/emqx_auth_http/src/emqx_auth_http_app.erl | 4 ++-- apps/emqx_web_hook/src/emqx_web_hook_actions.erl | 10 ++++++---- apps/emqx_web_hook/src/emqx_web_hook_app.erl | 4 ++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/apps/emqx_auth_http/src/emqx_auth_http_app.erl b/apps/emqx_auth_http/src/emqx_auth_http_app.erl index f27b6caf2..c5a7f2a77 100644 --- a/apps/emqx_auth_http/src/emqx_auth_http_app.erl +++ b/apps/emqx_auth_http/src/emqx_auth_http_app.erl @@ -60,7 +60,7 @@ translate_env(EnvName) -> Path = path(Path0), MoreOpts = case Scheme of http -> - [{transport_opts, [ipv6_probe]}]; + [{transport_opts, emqx_misc:ipv6_probe([])}]; https -> CACertFile = application:get_env(?APP, cacertfile, undefined), CertFile = application:get_env(?APP, certfile, undefined), @@ -85,7 +85,7 @@ translate_env(EnvName) -> , {ciphers, emqx_tls_lib:default_ciphers()} | TLSOpts ], - [{transport, ssl}, {transport_opts, [ipv6_probe | NTLSOpts]}] + [{transport, ssl}, {transport_opts, emqx_misc:ipv6_probe(NTLSOpts)}] end, PoolOpts = [{host, Host}, {port, Port}, diff --git a/apps/emqx_web_hook/src/emqx_web_hook_actions.erl b/apps/emqx_web_hook/src/emqx_web_hook_actions.erl index 7b04f6004..c88f8f39b 100644 --- a/apps/emqx_web_hook/src/emqx_web_hook_actions.erl +++ b/apps/emqx_web_hook/src/emqx_web_hook_actions.erl @@ -331,10 +331,12 @@ pool_opts(Params = #{<<"url">> := URL}, ResId) -> PoolSize = maps:get(<<"pool_size">>, Params, 32), ConnectTimeout = cuttlefish_duration:parse(str(maps:get(<<"connect_timeout">>, Params, <<"5s">>))), - TransportOpts = case Scheme =:= https of - true -> [ipv6_probe | get_ssl_opts(Params, ResId)]; - false -> [ipv6_probe] - end, + TransportOpts0 = + case Scheme =:= https of + true -> [get_ssl_opts(Params, ResId)]; + false -> [] + end, + TransportOpts = emqx_misc:ipv6_probe(TransportOpts0), Opts = case Scheme =:= https of true -> [{transport_opts, TransportOpts}, {transport, ssl}]; false -> [{transport_opts, TransportOpts}] diff --git a/apps/emqx_web_hook/src/emqx_web_hook_app.erl b/apps/emqx_web_hook/src/emqx_web_hook_app.erl index b5c001b98..492af628d 100644 --- a/apps/emqx_web_hook/src/emqx_web_hook_app.erl +++ b/apps/emqx_web_hook/src/emqx_web_hook_app.erl @@ -49,7 +49,7 @@ translate_env() -> PoolSize = application:get_env(?APP, pool_size, 32), MoreOpts = case Scheme of http -> - [{transport_opts, [ipv6_probe]}]; + [{transport_opts, emqx_misc:ipv6_probe([])}]; https -> CACertFile = application:get_env(?APP, cacertfile, undefined), CertFile = application:get_env(?APP, certfile, undefined), @@ -74,7 +74,7 @@ translate_env() -> , {ciphers, emqx_tls_lib:default_ciphers()} | TLSOpts ], - [{transport, ssl}, {transport_opts, [ipv6_probe | NTLSOpts]}] + [{transport, ssl}, {transport_opts, emqx_misc:ipv6_probe(NTLSOpts)}] end, PoolOpts = [{host, Host}, {port, Port},