diff options
author | Micael Karlberg <[email protected]> | 2019-07-01 11:54:54 +0200 |
---|---|---|
committer | Micael Karlberg <[email protected]> | 2019-07-01 11:54:54 +0200 |
commit | 3415956730b1de58789832d0be3f5c17fd9f94c9 (patch) | |
tree | 534aba17284dec0ad2e1c6e494d07a532fd145a0 /erts/emulator/test/socket_SUITE.erl | |
parent | c4146a9e9d9e49e9a913acb9ce37f5816921626a (diff) | |
download | otp-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/emulator/test/socket_SUITE.erl')
-rw-r--r-- | erts/emulator/test/socket_SUITE.erl | 23 |
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}); |