wiz550ioTCP connection error :10061 질문

안녕하세요. 질문하고자 하는 사항이 있습니다.

int main(void)
{
SystemClock_Config();
MX_GPIO_Init();
MX_SPI1_Init();
W5500HardwareInitilize();
HAL_Delay(200);
W5500Initialze();
HAL_Delay(200);
wizchip_setnetinfo(&gWIZNETINFO);
HAL_Delay(200);
print_network_information();
HAL_Delay(200);
unsigned int recvsize;
socket(TCP_SOCKET,Sn_MR_TCP,TCP_PORT,0);
listen(TCP_SOCKET);

while (1)
{
if(getSn_SR(TCP_SOCKET) == SOCK_ESTABLISHED)
{
recvsize = recv(TCP_SOCKET,tempBuffer,BUFFER_SIZE);
if(recvsize)
{
if(strcmp(tempBuffer,“0\n”) == 0)
{
HAL_GPIO_WritePin(GPIOG,GPIO_PIN_13,0);
send(TCP_SOCKET,“led on”,6);
}
else if(strcmp(tempBuffer,“1\n”) == 0)
{
HAL_GPIO_WritePin(GPIOG,GPIO_PIN_13,1);
send(TCP_SOCKET,“led off”,6);
}
memset(tempBuffer,0,BUFFER_SIZE);
}
}
else if(getSn_SR(TCP_SOCKET) == SOCK_CLOSE_WAIT)
{
disconnect(TCP_SOCKET);
}
}
}

위와 같이 코드를 구성했습니다. 정상적으로 통신이 됩니다.

그런데 hercules 프로그램에서 TCP connection error :10061 에러가 납니다.

에러는 최초 connect 가 되었을때는 잘 연결이 되지만 disconnect 하고 다시 connect 를 하려고 하면
TCP connection error :10061 에러가 납니다.
보드를 재부팅 하면 다시 정상적으로 동작합니다.

살펴본 결과
WIZCHIP_READ 함수에서 return 값이 달랐습니다.

uint8_t WIZCHIP_READ(uint32_t AddrSel)
{
uint8_t ret;
uint8_t spi_data[3];

WIZCHIP_CRITICAL_ENTER();
WIZCHIP.CS._select();

AddrSel |= (W5500_SPI_READ | W5500_SPI_VDM_OP);

if(!WIZCHIP.IF.SPI._read_burst || !WIZCHIP.IF.SPI._write_burst) // byte operation
{
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16);
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8);
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >> 0);
}
else // burst operation
{
spi_data[0] = (AddrSel & 0x00FF0000) >> 16;
spi_data[1] = (AddrSel & 0x0000FF00) >> 8;
spi_data[2] = (AddrSel & 0x000000FF) >> 0;
WIZCHIP.IF.SPI._write_burst(spi_data, 3);
}
ret = WIZCHIP.IF.SPI._read_byte();

WIZCHIP.CS._deselect();
WIZCHIP_CRITICAL_EXIT();
return ret;
}

최초 부팅 후 WIZCHIP_READ 함수의 return 값은 0x14 였습니다.

pc와 w5500이 연결된 상태에서는 return 값 ret 는 0x00, 0x00, 0x17 이렇게 세개를 반복했습니다.

pc와 w5500이 연결이 끊어지면 return 값 ret 는 0x00 이었습니다.

무엇이 잘못되었을까요?
어떻게 해야 연결이 끊어져도 다시 올바르게 연결 할 수 있을지 궁금합니다.

무엇이 잘못 된 걸까요?