2016-06-17 3 views
0

Ich versuche eine Möglichkeit zu finden, einen IPv4 UDP-Socket an eine Broadcast-Adresse in Micrium (μC/OS-Ⅲ) zu binden.So binden Sie an eine Broadcast-Adresse in Micium

Der Versuch, einen Socket an die tatsächliche Broadcast-Adresse zu binden, gibt einfach NET_SOCK_ERR_INVALID_ADDR zurück. Die Übertragung ist nicht explizit in der Liste der Dinge, die auf der NetSock_Bind Rufdokumentation zu binden, erwähnt, gibt es kein Analogon von SO_BROADCAST entweder. Ist es überhaupt unmöglich?

Kann ich als letzten Ausweg eine Broadcast-Adresse zu einer vorhandenen Schnittstelle als eigene Adresse hinzufügen (das sollte ARP nicht stören, da niemand danach fragen wird, und ich werde nicht senden irgendetwas durch es)?

+0

Ich versuche es jetzt auch zu benutzen, hast du etwas gefunden? BTW, können Sie Multicast-Adresse verwenden und mit der Multicast-Implementierung arbeiten (über die sie Dokumentation verfügen). –

Antwort

0

betrachten micrium documentation. Folgen Sie den Schritten und Sie erhalten keinen Fehler.

BTW, wenn Sie nicht NetApp_SetSockAddr verwenden und versuchen, mit NetSock_Bind zu binden, erhalten Sie die NET_SOCK_ERR_INVALID_ADDR, die Ihnen passiert ist.

Edit:

Blick auf den nächsten Code, der für mich arbeitet. Beachten Sie, dass die IP-Adresse I die Host-Adresse manuell initialisiert und die definierte Adresse NET_SOCK_ADDR_IP_V4_WILDCARD verwendet hat.

NET_SOCK_ADDR_IPv4 host; 
NET_ERR perr; 

Mem_Clr(&host, sizeof(host)); 
host.AddrFamily = NET_SOCK_ADDR_FAMILY_IP_V4; 
host.Addr = NET_UTIL_HOST_TO_NET_32(NET_SOCK_ADDR_IP_V4_WILDCARD); 
host.Port = NET_UTIL_HOST_TO_NET_16(socketPort); 

netSockId = NetSock_Open(NET_SOCK_PROTOCOL_FAMILY_IP_V4, 
          NET_SOCK_TYPE_DATAGRAM, 
          NET_SOCK_PROTOCOL_UDP, 
         &perr); 

if (perr != NET_SOCK_ERR_NONE) 
{ 
    // log the error. 
    return; 
} 

NetSock_Bind(    netSockId, 
      (NET_SOCK_ADDR*)&host, 
           NET_SOCK_ADDR_SIZE, 
          &perr); 
if (perr != NET_SOCK_ERR_NONE) 
{ 
    // log the error. 
    return; 
} 

Was ich über die Funktion NetApp_SetSockAddr() sagte ist, dass, wenn ich es nennen den Host anstatt manuell zu initialisieren, den Fehler zurückgegeben Sie erhalten haben.

+0

Es tut mir leid, aber ich sehe nichts auf dieser speziellen Seite, die über Broadcast spricht. Die Bindung an reguläre Adressen funktioniert problemlos für UDP-Sockets, ohne 'NetApp_SetSockAddr' aufzurufen. –

+0

@PawelVeselov Ich habe die Antwort bearbeitet, so dass es meinen Code zeigen würde –

+0

Wollen Sie sagen, dass die Bindung an NET_SOCK_ADDR_IP_V4_WILDCARD den Socket Broadcast-Pakete erhalten wird? –

Verwandte Themen