현재 TCP/IP Client로 소켓 두개(0번과 1번)을
지정된 소켓에서 일정시간동안 제대로된 TCP/IP 패킷이 없을시 무언가 시스템에 문제가 있다고 판단하여 해당 소켓을 닫았다가 다시 열려고 합니다. 소켓을 하나만 열면 그냥 W5500 리셋후 처음부터 다시 시작하면 되는데 소켓을 2개를 열어야되니 다른 소켓에 영향을 끼치면 안됩니다.
소켓을 닫을시 현재 소켓의 status와 관계없이 그냥 바로 Sn_CR에 0x10을 써버리면 바로 소켓이 닫히나요?
그리고 나서 Sn_Sr을 체크 하여 소켓이 닫힌것을 확인 한 후, 다시 처음부터 소켓 Initialization을 하면 해당 소켓에 한해서는 W5500을 Reset했다가 다시 ON 시킨것 과 같은 효과가 있는지 궁금 합니다.
아 그리고 소켓 close 명령을 내린후 약 얼마시간동안 기다려야 status가 0x00(CLOSED)로 되는지 궁금합니다.
참고로, TCP SOCKET은 DISCONN(0x08)도 지원하지만, 상대방의 Ack가 필요없을 경우 CLOSE(0x10)으로 Close할 수 있습니다.
또한 Client 모드로 동작시킬때, 소스 포트 넘버는 이전값과 다른값을 갖도록 설정하는게 좋습니다. 같은 소스 포트를 사용할 경우 접속이 안될 수 있습니다.