Wiz107sr udp 관련 문의

“WIZ107SR UDP 통신이 되지 않습니다.” 라는 질문을 남겼던 사람입니다~

UDP 소스코드를 첨부하면 살펴봐주신다고 하셔서

main.c 파일과 UDP가 동작하는 lookback.c 파일을 첨부하였습니다.

확인부탁드리겠습니다.
main.c (4.97 KB)
loopback.c (3.92 KB)

소스를 간단히 리뷰하였는데.
loopback_tcps()에서 UDP와 TCP를 모두를 처리하고 있네요

근데 한가지 현재 모든 채널을 UDP로 동일한 Source Port로 Open하여 사용하시면 안됩니다.
동일한 포트는 TCP 서버모들일 때만 사용이 가능합니다.

이부분 확인 바랍니다.

그리고 한가지 TCP와 UDP는 스택가 다르므로 다른 함수로 구분하여 사용하시는게 좋습니다.

코드 잘 보았습니다.
TCP Loopback 코드를 기반으로 수정하시는 과정에서 불필요한 동작들이 삽입되어 있는 것으로 보입니다.

UDP Loopback test 코드는 다음과 같이 구성되면 충분합니다.
참고를 위해 W7100A Application note - UDP의 코드 일부를 첨부합니다.

void loopback_udp(SOCKET s, uint16 port, uint8 xdata * data_buf, uint16 mode)
{
	uint16 xdata len;
	uint8 xdata destip[4];
	uint16 xdata destport;
	
	switch(IINCHIP_READ(Sn_SR(s)))
	{
		case SOCK_UDP:
			// Check the size of received data
			if((len=getSn_RX_RSR(s)) > 0)
			{
				// Receive data from destination
				len = recvfrom(s,data_buf,len,(uint8*)destip,&destport);  
				
				// Send the data to the destination
				if(len != sendto(s,data_buf,len,(uint8*)destip,destport))
				{
					printf("Sendto Failed\r\n");
				}		
			}
			break;
		        
		case SOCK_CLOSED:                              
			close(s);                                       // Close the SOCKET
			socket(s,Sn_MR_UDP,port,mode);                  // Open the SOCKET with UDP mode
			printf("LOOPBACK_UDPStarted. CH : %bu\r\n",s);
			break;
		
		default:
			break;
	}
}