diff --git a/src/libCom/osi/os/WIN32/osdNetIntf.c b/src/libCom/osi/os/WIN32/osdNetIntf.c index e980e4b40..0265a3994 100644 --- a/src/libCom/osi/os/WIN32/osdNetIntf.c +++ b/src/libCom/osi/os/WIN32/osdNetIntf.c @@ -231,9 +231,14 @@ epicsShareFunc void epicsShareAPI osiSockDiscoverBroadcastAddresses unsigned result = (addr & mask) | (bcast &~mask); pNewNode->addr.ia.sin_family = AF_INET; pNewNode->addr.ia.sin_addr.s_addr = result; + pNewNode->addr.ia.sin_port = 0u; + pNewNode->netMask.ia.sin_family = AF_INET; + pNewNode->netMask.ia.sin_addr.s_addr = mask; + pNewNode->netMask.ia.sin_port = 0u; } else { pNewNode->addr.sa = pIfinfo->iiBroadcastAddress.Address; + memset ( &pNewNode->netMask, '\0', sizeof ( pNewNode->netMask ) ); } /* diff --git a/src/libCom/osi/os/default/osdNetIntf.c b/src/libCom/osi/os/default/osdNetIntf.c index 43dbeee1f..d8feebc30 100644 --- a/src/libCom/osi/os/default/osdNetIntf.c +++ b/src/libCom/osi/os/default/osdNetIntf.c @@ -181,6 +181,13 @@ epicsShareFunc void epicsShareAPI osiSockDiscoverBroadcastAddresses continue; } pNewNode->addr.sa = pifreq->ifr_broadaddr; + status = socket_ioctl (socket, SIOCGIFNETMASK, pifreq); + if ( status ) { + errlogPrintf ("osiSockDiscoverInterfaces(): net intf \"%s\": net mask fetch fail\n", pifreq->ifr_name); + free ( pNewNode ); + continue; + } + pNewNode->netMask.sa = pifreq->ifr_netmask; } else if ( pifreq->ifr_flags & IFF_POINTOPOINT ) { status = socket_ioctl ( socket, SIOCGIFDSTADDR, pifreq); @@ -190,6 +197,7 @@ epicsShareFunc void epicsShareAPI osiSockDiscoverBroadcastAddresses continue; } pNewNode->addr.sa = pifreq->ifr_dstaddr; + memset ( &pNewNode->netMask, '\0', sizeof ( pNewNode->netMask ) ); } else { errlogPrintf ( "osiSockDiscoverInterfaces(): net intf \"%s\": not pt to pt or bcast?\n", pifreq->ifr_name );