diff options
author | Lars Thorsen <lars.thorsen@ericsson.com> | 2014-06-12 11:21:55 +0200 |
---|---|---|
committer | Lars Thorsen <lars.thorsen@ericsson.com> | 2014-06-23 08:49:24 +0200 |
commit | ed3927c0db4b59cebdf10049f4b03a7e96383a88 (patch) | |
tree | 1c9576a951f9fb503e8c7d2d95f55a0a42ec9da4 /lib/orber/src/orber_iiop_outproxy.erl | |
parent | 1af8998028f77b4ca01c52972a5983b072ef02d1 (diff) | |
download | erlang-ed3927c0db4b59cebdf10049f4b03a7e96383a88.tar.gz |
[orber] Add possibilty to configure orber to run in both IPv4 and IPv6
Diffstat (limited to 'lib/orber/src/orber_iiop_outproxy.erl')
-rw-r--r-- | lib/orber/src/orber_iiop_outproxy.erl | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/lib/orber/src/orber_iiop_outproxy.erl b/lib/orber/src/orber_iiop_outproxy.erl index 8319d89088..89a3d4fde0 100644 --- a/lib/orber/src/orber_iiop_outproxy.erl +++ b/lib/orber/src/orber_iiop_outproxy.erl @@ -112,7 +112,8 @@ stop(Pid) -> %%----------------------------------------------------------------- init({connect, Host, Port, SocketType, SocketOptions, Parent, Key, NewKey}) -> process_flag(trap_exit, true), - case catch orber_socket:connect(SocketType, Host, Port, SocketOptions) of + case catch orber_socket:connect(SocketType, Host, Port, + get_ip_family_opts(Host) ++ SocketOptions) of {'EXCEPTION', _E} -> ignore; %% We used to reply the below but since this would generate a CRASH REPORT @@ -507,3 +508,38 @@ clear_queue(Proxy, RequestId, MRef) -> end end. +get_ip_family_opts(Host) -> + case inet:parse_address(Host) of + {ok, {_,_,_,_}} -> + [inet]; + {ok, {_,_,_,_,_,_,_,_}} -> + [inet6, {ipv6_v6only, true}]; + {error, einval} -> + check_family_for_name(Host, orber_env:ip_version()) + end. + +check_family_for_name(Host, inet) -> + case inet:getaddr(Host, inet) of + {ok, _Address} -> + [inet]; + {error, _} -> + case inet:getaddrs(Host, inet6) of + {ok, _Address} -> + [inet6, {ipv6_v6only, true}]; + {error, _} -> + [inet] + end + end; +check_family_for_name(Host, inet6) -> + case inet:getaddr(Host, inet6) of + {ok, _Address} -> + [inet6, {ipv6_v6only, true}]; + {error, _} -> + case inet:getaddr(Host, inet) of + {ok, _Address} -> + [inet]; + {error, _} -> + [inet6, {ipv6_v6only, true}] + end + end. + |