aboutsummaryrefslogtreecommitdiffstats
path: root/erts
diff options
context:
space:
mode:
authorMicael Karlberg <[email protected]>2019-07-01 11:54:54 +0200
committerMicael Karlberg <[email protected]>2019-07-01 11:54:54 +0200
commit3415956730b1de58789832d0be3f5c17fd9f94c9 (patch)
tree534aba17284dec0ad2e1c6e494d07a532fd145a0 /erts
parentc4146a9e9d9e49e9a913acb9ce37f5816921626a (diff)
downloadotp-3415956730b1de58789832d0be3f5c17fd9f94c9.tar.gz
otp-3415956730b1de58789832d0be3f5c17fd9f94c9.tar.bz2
otp-3415956730b1de58789832d0be3f5c17fd9f94c9.zip
[esock] Improve mulicast address selection
We use the netstat program to find a multicast address. But that program write some stuff stderr which confused the code. Add an attempt to filter out anything comming on stderr. Also try to catch errors, end "translate" them into skip.
Diffstat (limited to 'erts')
-rw-r--r--erts/emulator/test/socket_SUITE.erl23
1 files changed, 16 insertions, 7 deletions
diff --git a/erts/emulator/test/socket_SUITE.erl b/erts/emulator/test/socket_SUITE.erl
index c82e2efad9..02b7d11921 100644
--- a/erts/emulator/test/socket_SUITE.erl
+++ b/erts/emulator/test/socket_SUITE.erl
@@ -8015,13 +8015,22 @@ which_multicast_address(Domain) ->
%% SunOS: IfName - Group - RefCnt
which_multicast_address2(Domain, WhichMAddr) ->
- IfName = which_local_host_ifname(Domain),
- NetstatGroupsStr = os:cmd("netstat -g | grep " ++ IfName),
- NetstatGroups0 = string:tokens(NetstatGroupsStr, [$\n]),
- NetstatGroups = [string:tokens(G, [$ ]) || G <- NetstatGroups0],
- MAddrs = [WhichMAddr(NetstatGroup) || NetstatGroup <-
- NetstatGroups],
- which_multicast_address3(Domain, MAddrs).
+ IfName = which_local_host_ifname(Domain),
+ try
+ begin
+ %% On some platforms the netstat barfs out some crap on stderr
+ %% before the actual info...
+ NetstatGroupsStr = os:cmd("netstat -g 2>/dev/null | grep " ++ IfName),
+ NetstatGroups0 = string:tokens(NetstatGroupsStr, [$\n]),
+ NetstatGroups = [string:tokens(G, [$ ]) || G <- NetstatGroups0],
+ MAddrs = [WhichMAddr(NetstatGroup) || NetstatGroup <-
+ NetstatGroups],
+ which_multicast_address3(Domain, MAddrs)
+ end
+ catch
+ C:E:S ->
+ not_supported({multicast, {C,E,S}})
+ end.
which_multicast_address3(_Domain, []) ->
not_supported({multicast, no_valid_addrs});