연결 해제시 문제

w5200을 사용중입니다.
제품이 클라이언트로 동작하고 PC가 서버로 동작하는 구성인데,
접속 종료시에 소켓 상태가 FIN_WAIT2로 되어 해제되지 않습니다.
찾아보니 ack가 정상적으로 보내지지 않아서 그렇다고 하는데…
해결 방법은 뭔가요?

안녕하세요.

TCP 에서는 close 를 4-way handshake 과정을 거쳐 close가 됩니다.

현재 아마도 SOCK_FIN_WAIT 상태일 것으로 생각됩니다. 이 상태에서 빠져 나오지 못하는 경우는 다양합니다.

트래픽이 많아져서 FIN packet이나 ACK packet을 주고 받지 못하는 경우일 수도 있으며 server에서 제대로 처리 못하는 경우도 있습니다.

따라서 원천적인 해결 방법은 문제가 발생하는 부분을 찾아야 합니다.

그러나 일반적인 어플리케이션에서는 그리고 W5200에서는 active close나 passive close에서 disconnect process 과정이 정상적으로 완료되지 않을 경우 timeout interrupt가 발생합니다. 그 이후 자동으로 close 상태로 변합니다.

또한 timeout은 RTR과 RCR 설정에 따라 몇 번의 재전송 이후 발생하게 됩니다.

아마 이 RTR과 RCR설정을 길게 잡으셔서 해제되지 않다고 판단하신 것으로 생각됩니다. 이 설정값을 줄이시면 바로 close가 될겁니다.

감사합니다.