must zero osiSockAddr prior to use!
RTEMS depends on this or eg. bind() will fail because comparison with list of interface addresses is done with memcmp()!
This commit is contained in:
@ -147,6 +147,7 @@ bool processSearchResponse(osiSockAddr const & responseFrom, ByteBuffer & receiv
|
||||
/*int32 searchSequenceId = */receiveBuffer.getInt();
|
||||
|
||||
osiSockAddr serverAddress;
|
||||
memset(&serverAddress, 0, sizeof(serverAddress));
|
||||
serverAddress.ia.sin_family = AF_INET;
|
||||
|
||||
// 128-bit IPv6 address
|
||||
@ -265,6 +266,7 @@ bool discoverServers(double timeOut)
|
||||
}
|
||||
|
||||
osiSockAddr bindAddr;
|
||||
memset(&bindAddr, 0, sizeof(bindAddr));
|
||||
bindAddr.ia.sin_family = AF_INET;
|
||||
bindAddr.ia.sin_port = htons(0);
|
||||
bindAddr.ia.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
|
@ -39,6 +39,7 @@ BlockingTCPAcceptor::BlockingTCPAcceptor(
|
||||
epicsThreadStackMedium),
|
||||
epicsThreadPriorityMedium)
|
||||
{
|
||||
memset(&_bindAddress, 0, sizeof(_bindAddress));
|
||||
_bindAddress.ia.sin_family = AF_INET;
|
||||
_bindAddress.ia.sin_port = htons(port);
|
||||
_bindAddress.ia.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
|
@ -343,6 +343,8 @@ bool BlockingUDPTransport::processBuffer(Transport::shared_pointer const & trans
|
||||
{
|
||||
// 128-bit IPv6 address
|
||||
osiSockAddr originNIFAddress;
|
||||
memset(&originNIFAddress, 0, sizeof(originNIFAddress));
|
||||
|
||||
if (decodeAsIPv6Address(receiveBuffer, &originNIFAddress))
|
||||
{
|
||||
originNIFAddress.ia.sin_family = AF_INET;
|
||||
@ -566,6 +568,7 @@ void initializeUDPTransports(bool serverFlag,
|
||||
//
|
||||
|
||||
osiSockAddr anyAddress;
|
||||
memset(&anyAddress, 0, sizeof(anyAddress));
|
||||
anyAddress.ia.sin_family = AF_INET;
|
||||
anyAddress.ia.sin_port = htons(0);
|
||||
anyAddress.ia.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
@ -685,6 +688,7 @@ void initializeUDPTransports(bool serverFlag,
|
||||
{
|
||||
// where to bind (listen) address
|
||||
osiSockAddr listenLocalAddress;
|
||||
memset(&listenLocalAddress, 0, sizeof(listenLocalAddress));
|
||||
listenLocalAddress.ia.sin_family = AF_INET;
|
||||
listenLocalAddress.ia.sin_port = htons(listenPort);
|
||||
listenLocalAddress.ia.sin_addr.s_addr = node.ifaceAddr.ia.sin_addr.s_addr;
|
||||
@ -721,6 +725,7 @@ void initializeUDPTransports(bool serverFlag,
|
||||
*/
|
||||
|
||||
osiSockAddr bcastAddress;
|
||||
memset(&bcastAddress, 0, sizeof(bcastAddress));
|
||||
bcastAddress.ia.sin_family = AF_INET;
|
||||
bcastAddress.ia.sin_port = htons(listenPort);
|
||||
bcastAddress.ia.sin_addr.s_addr = node.ifaceBCast.ia.sin_addr.s_addr;
|
||||
|
@ -2564,6 +2564,7 @@ public:
|
||||
int32 searchSequenceId = payloadBuffer->getInt();
|
||||
|
||||
osiSockAddr serverAddress;
|
||||
memset(&serverAddress, 0, sizeof(serverAddress));
|
||||
serverAddress.ia.sin_family = AF_INET;
|
||||
|
||||
// 128-bit IPv6 address
|
||||
@ -2627,6 +2628,7 @@ public:
|
||||
payloadBuffer->getShort();
|
||||
|
||||
osiSockAddr responseAddress;
|
||||
memset(&responseAddress, 0, sizeof(responseAddress));
|
||||
responseAddress.ia.sin_family = AF_INET;
|
||||
|
||||
// 128-bit IPv6 address
|
||||
@ -2715,6 +2717,7 @@ public:
|
||||
int16 changeCount = payloadBuffer->getShort();
|
||||
|
||||
osiSockAddr serverAddress;
|
||||
memset(&serverAddress, 0, sizeof(serverAddress));
|
||||
serverAddress.ia.sin_family = AF_INET;
|
||||
|
||||
// 128-bit IPv6 address
|
||||
|
@ -254,6 +254,7 @@ void ServerSearchHandler::handleResponse(osiSockAddr* responseFrom,
|
||||
payloadBuffer->getShort();
|
||||
|
||||
osiSockAddr responseAddress;
|
||||
memset(&responseAddress, 0, sizeof(responseAddress));
|
||||
responseAddress.ia.sin_family = AF_INET;
|
||||
|
||||
// 128-bit IPv6 address
|
||||
|
@ -126,6 +126,7 @@ void ServerContextImpl::loadConfiguration()
|
||||
SET_LOG_LEVEL(logLevelDebug);
|
||||
|
||||
// TODO multiple addresses
|
||||
memset(&_ifaceAddr, 0, sizeof(_ifaceAddr));
|
||||
_ifaceAddr.ia.sin_family = AF_INET;
|
||||
_ifaceAddr.ia.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
_ifaceAddr.ia.sin_port = 0;
|
||||
|
@ -89,6 +89,7 @@ bool Configuration::getPropertyAsAddress(const std::string& name, osiSockAddr* a
|
||||
|
||||
if(val.empty()) return false;
|
||||
|
||||
memset(addr, 0, sizeof(*addr));
|
||||
addr->ia.sin_family = AF_INET;
|
||||
if(aToIPAddr(val.c_str(), dftport, &addr->ia))
|
||||
return false;
|
||||
|
@ -27,6 +27,7 @@ namespace pvAccess {
|
||||
|
||||
void addDefaultBroadcastAddress(InetAddrVector* v, unsigned short p) {
|
||||
osiSockAddr pNewNode;
|
||||
memset(&pNewNode, 0, sizeof(pNewNode));
|
||||
pNewNode.ia.sin_family = AF_INET;
|
||||
// TODO this does not work in case of no active interfaces, should return 127.0.0.1 then
|
||||
pNewNode.ia.sin_addr.s_addr = htonl(INADDR_BROADCAST);
|
||||
@ -102,6 +103,7 @@ bool isMulticastAddress(const osiSockAddr* address) {
|
||||
}
|
||||
|
||||
void intToIPv4Address(osiSockAddr& ret, int32 addr) {
|
||||
memset(&ret, 0, sizeof(ret));
|
||||
ret.ia.sin_family = AF_INET;
|
||||
ret.ia.sin_addr.s_addr = htonl(addr);
|
||||
ret.ia.sin_port = 0;
|
||||
@ -205,6 +207,7 @@ int getLoopbackNIF(osiSockAddr &loAddr, string const & localNIF, unsigned short
|
||||
}
|
||||
|
||||
// fallback
|
||||
memset(&loAddr, 0, sizeof(loAddr));
|
||||
loAddr.ia.sin_family = AF_INET;
|
||||
loAddr.ia.sin_port = ntohs(port);
|
||||
loAddr.ia.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
|
||||
@ -514,6 +517,7 @@ int discoverInterfaces(IfaceNodeVector &list, SOCKET socket, const osiSockAddr *
|
||||
const unsigned bcast = pIfinfo->iiBroadcastAddress.AddressIn.sin_addr.s_addr;
|
||||
const unsigned addr = pIfinfo->iiAddress.AddressIn.sin_addr.s_addr;
|
||||
unsigned result = (addr & mask) | (bcast &~mask);
|
||||
memset(&node.ifaceBCast, 0, sizeof(node.ifaceBCast));
|
||||
node.ifaceBCast.ia.sin_family = AF_INET;
|
||||
node.ifaceBCast.ia.sin_addr.s_addr = result;
|
||||
node.ifaceBCast.ia.sin_port = htons ( 0 );
|
||||
|
@ -243,6 +243,7 @@ void test_multicastLoopback()
|
||||
epicsSocketEnableAddressUseForDatagramFanout(socket);
|
||||
|
||||
osiSockAddr bindAddr;
|
||||
memset(&bindAddr, 0, sizeof(bindAddr));
|
||||
bindAddr.ia.sin_family = AF_INET;
|
||||
bindAddr.ia.sin_port = ntohs(port);
|
||||
bindAddr.ia.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
|
Reference in New Issue
Block a user