안녕하세요 현재 W5300을 TCP통신 Client로 하여 Server에 접속하면 Client에서 데이터 전송 후 Server와 데이터를 주고 받는 형식의 구조입니다
그런데 Server에 접속을 한 후 Client가 최초 데이터를 전송을 하고 Server에서 응답의 받고
다음 데이터 전송을 한 후 Server에서 응답 데이터를 전송하지 않아 wireshark로 데이터 상황을 보니
Client에서 SYN 전송하지 않는 것을 확인 하였습니다
그래서 W5300의 Sn_SSR 확인을 하니 SOCK_SYNSENT 동작은 하지 않고 바로 SOCK_ESTABLISHED가
동작을 하던데 원래 이러한 것인지 아니면 잘못 된 것인지 궁금합니다
아래 코드는 connect 코드 입니다
int8_t connect(uint8_t sn, uint8_t * addr, uint16_t port)
{
if(((addr[0] == 0xFF) && (addr[1] == 0xFF) && (addr[2] == 0xFF) && (addr[3] == 0xFF)) ||
((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) ||
(port == 0x00)
)
{
return 0;
}
setSn_DIPR(sn, addr);
setSn_DPORTR(sn, port);
setSn_CR(sn, Sn_CR_CONNECT);
int a = getSn_IR(sn);
while(!getSn_IR(sn))
{
setSn_CR(sn, Sn_CR_CONNECT);
a = getSn_IR(sn);
HAL_Delay(1000);
}
while(getSn_CR(sn));
uint16_t SSR_Check = getSn_SSR(sn);
uint8_t timeout_ = 0;
while(SSR_Check != SOCK_SYNSENT)
{
SSR_Check = getSn_SSR(sn);
printf("GetSn_SSR Check [%x]\n", SSR_Check);
/*if(SSR_Check == SOCK_ESTABLISHED)
{
printf("Connect Request Success\n");
break;
}*/
if((getSn_IR(sn) & Sn_IR_TIMEOUT) || timeout_ > 50)
{
printf("Connect Request Timeout\n");
setSn_IR(sn, (Sn_IR_TIMEOUT));
return SOCKERR_TIMEOUT;
}
timeout_++;
HAL_Delay(100);
}
printf("GetSn_SSR Check [%x]\n", SSR_Check);
return 1;
}