From 3415956730b1de58789832d0be3f5c17fd9f94c9 Mon Sep 17 00:00:00 2001 From: Micael Karlberg Date: Mon, 1 Jul 2019 11:54:54 +0200 Subject: [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. --- erts/emulator/test/socket_SUITE.erl | 23 ++++++++++++++++------- 1 file 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}); -- cgit v1.2.3