Timeout에 관한 질문드립니다

#1

w5300을 클라이언트로, PC를 서버로 사용하고 있습니다.

PC의 서버를 먼저 동작시키고,

다음에 클라이언트를 동작시켰을 때는 연결 및 데이터 전송이 잘 되는 것을 확인하였습니다.

그런데 반대의 경우, PC의 서버를 동작시키지 않은 상태에서

클라이언트를 먼저 동작시키고 다음에 서버를 동작시켰을 때는 연결이 안되는 것을 확인하였습니다.

wire shark로 패킷을 확인해 보니 클라이언트에서 SYN패킷을 전송하고, PC에서 RST패킷을 전송하였습니다.

그리고 그 이후에는 아무런 움직임이 없었습니다.

소스코드를 확인해 보니 Connect함수의 아래 while문을 반복하는 것을 확인하였습니다.

while문을 반복할때 Sn_IR은 0x2, Sn_SSR은 0x0을 나타내고 있었습니다.

while( IINCHIP_READ(Sn_SSR(s)) != SOCK_SYNSENT )
{
if( (IINCHIP_READ(Sn_SSR(s)) & 0xff) == SOCK_ESTABLISHED)
{ break;
}
if(getSn_IR(s) & Sn_IR_TIMEOUT)
{ setSn_IR(s,(Sn_IR_TIMEOUT));
break;
}
}

구문에 timeout시 빠저나오도록 되어있는데 timeout이 안되는 것 같습니다.

데이터 시트 71페이지 상단에 RST패킷을 수신한 경우 Sn_SSR이 SOCK_CLOSED로 변경된다고 나와있는데

소켓이 이미 close되어서 timeout이 발생 안하는 것인가요?

서버와 연결을 시키려면 어떻게 해야하나요?

도움부탁드립니다.


#2

RST 패킷을 수신을 한 경우는 Timeout이발생하지 않습니다. 대신 Socket이 Close됩니다.
이런 경우 Timeout 뿐만아리나 Socket이 Closed인지도 확인 필요합니다.