W6100 UDP 수신이 안되는 문제

안녕하세요. 두 개의 wz610mj 로 송,수신 테스트를 하고 있는데요…

일반적인 방법 ( 지정된 IP로 데이터를 보내는 방법? )
과 브로드캐스트 둘 다 제대로 데이터를 받을 수 없었습니다

다음은 제가 사용한 코드입니다…

초기화 부분
// 아랫부분은 위즈넷 예제에서 가져와서 조금 수정했어요
wiz_NetInfo gWIZNETINFO = { .mac = {0x00,0x08,0xdc,0xFF,0xFF,0xF0},
#ifdef TX
.ip = {192,168,0,10},
#else
.ip = {192,168,0,11},
#endif
.sn = {255, 255, 255, 0},
.gw = {192, 168, 177, 1},
.dns = {168, 126, 63, 1},
//.dhcp = NETINFO_STATIC,
.lla={0xfe,0x80,0x00,0x00,
0x00,0x00, 0x00,0x00,
0x02,0x08, 0xdc,0xff,
0xfe,0x57, 0x57,0x25}, ///< Source Link Local Address
.gua={0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00}, ///< Source Global Unicast Address
.sn6={0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00 }, ///< IPv6 Prefix
.gw6={0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00} ///< Gateway IPv6 Address
};

ctlwizchip(CW_SYS_UNLOCK,& syslock);
ctlnetwork(CN_SET_NETINFO,&gWIZNETINFO);

// 소켓 오픈 전에 해야 하는 것인지 알 수 없어 앞 뒤로 최대 버퍼 값을 바꾸려 했습니다
setSn_TX_BSR(0,2);
setSn_RX_BSR(0,2);
socket(0,Sn_MR_UDP4,50000,SF_MULTI_ENABLE);
//socket(0,Sn_MR_UDP4,50000,SF_IO_NONBLOCK); // 이것도 시도해보았습니다만…
setSn_TX_BSR(0,2);
setSn_RX_BSR(0,2);

송신부

bool W6100_SendData(uint8_t socket_num, uint8_t* databuf, datasize_t len )
{
uint8_t destip[16] = {255, 255, 255, 255};
//uint8_t destip[16] = {192,168,0,255};
int16_t destport = 50000;
uint8_t addrlen = 4;
datasize_t ret;

if( socket_num > 8 )
	return false;  /// socketnum error

ret = sendto(socket_num , databuf, len, destip, destport, addrlen); // Broadcast,
// ret 은 이제 실제로 보낸 값이 들어있음The real sent data size. It may be equal to <i>len</i> or small.\n
if( len != ret )
	return false;

return true;

}

수신부
아래에서 temp_datasize 가 항상 0이어서 수신을 처리 할 수가 없었습니다
datasize_t W6100_ReceiveData( uint8_t socket_num, uint8_t* databuf )
{
datasize_t temp_datasize = 0;
datasize_t ret = 0;
uint8_t addrlen = 4;
uint8_t status;
static uint8_t destip[16] = {192,168,0,10};
static uint16_t destport = 50000;

    getsockopt(socket_num, SO_STATUS,&status);

    if( status == SOCK_UDP ){
	if( SOCK_OK != getsockopt( socket_num, SO_RECVBUF, &temp_datasize) )
		return 0;

	if( temp_datasize <= 0)
		return 0;

	ret = recvfrom( socket_num , databuf, temp_datasize, (uint8_t*)destip, (uint16_t*)destport, &addrlen );

}
else
	return 0;
// ret 가 1 이상이면 받은 데이터 갯수임
// ret 가 0 이하면 에러임
return ret;

}

수신이 안된다고 생각하는 이유는

송신하는 부분을 컴퓨터 랜카드와 연결하여 wireshark로 확인하였을때 데이터가 들어오는것이
확인되기 때문이었습니다.

브로드캐스트를 보내고 받고 싶어 시작을 했는데요…
아무리 해도 잘 안되어서 송,수신부에 정해진 IP를 부여하여 보내는 방법도 사용 해보았지만

소득이 없었습니다. 도움 부탁드립니다.

안녕하세요

답변이 늦어 죄송합니다.
buffer 사이즈 설정은 socket 오픈전에 해주시면 됩니다.

MULTI_EANBLE의 경우 Multicast 사용시 설정하는 flag이므로 multicast group을 사용하시는것이 아니라면 disable 해주시는것이 좋습니다.
recv의 경우 기본값으로 unicast 와 broadcast도 수신할 수 있게 되어있지만
SEND의 경우 multicast group으로 밖에 send 하지 못합니다.

또한 SEND하는 쪽의 destination IP와 port가 RECV하는 쪽의 gWIZNETINFO의 IP, socket open시 설정한 port와 일치하는 한번더 확인 부탁드립니다.