2016-06-17 3 views
0

Micrium (μC/OS-Ⅲ)의 브로드 캐스트 주소에 IPv4 UDP 소켓을 바인딩하는 방법을 찾으려고합니다.Micrium에서 브로드 캐스트 주소에 바인딩하는 방법

소켓을 실제 브로드 캐스트 주소에 바인딩하려고하면 NET_SOCK_ERR_INVALID_ADDR이 반환됩니다. 브로드 캐스트가 NetSock_Bind 호출 설명서에서 바인딩 할 항목 목록에 명시 적으로 언급되지 않았으므로 SO_BROADCAST의 아날로그도 없습니다. 전혀 불가능한가요?

마지막 수단으로 기존 인터페이스에 브로드 캐스트 주소를 자체 주소로 추가 할 수 있습니까? (아무도 ARP를 묻지 않아야합니다. 누구도 요청하지 않으므로 전송하지 않을 것입니다. 그것을 통해 아무것도)?

+0

지금도 사용해 보려고합니다. 찾았습니까? BTW, 멀티 캐스트 주소를 사용할 수 있으며 멀티 캐스트 구현 작업을 수행 할 수 있습니다. –

답변

0

보기 micrium documentation. 단계를 따르십시오. 오류가 표시되지 않습니다.

NetApp_SetSockAddr을 사용하지 않고 NetSock_Bind을 사용하여 바인딩하려고하면 발생한 NET_SOCK_ERR_INVALID_ADDR을 받게됩니다.

편집 : 나를 위해 작동 다음 코드에서

보세요. IP 주소 I는 수동으로 호스트의 주소를 초기화하고 정의 된 주소 NET_SOCK_ADDR_IP_V4_WILDCARD을 사용했습니다. 나는 NetApp_SetSockAddr() 기능에 대해 말했다 무엇

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; 
} 

, 내가 수동으로 호스트를 초기화하는 대신에 그것을 호출하는 경우, 당신이받은 오류를 반환한다는 것입니다.

+0

죄송하지만 방송에 관한 특정 페이지에는 아무 것도 보이지 않습니다. 일반 주소에 바인드하는 것은'NetApp_SetSockAddr'를 호출하지 않고 UDP 소켓에 대해 잘 작동합니다. –

+0

@PawelVeselov 내 코드가 표시되도록 답변을 편집했습니다. –

+0

NET_SOCK_ADDR_IP_V4_WILDCARD에 바인딩하면 소켓에서 브로드 캐스트 패킷을 수신하게됩니까? –