소켓 close 명령 문의


#1

안녕하세요.

현재 TCP/IP Client로 소켓 두개(0번과 1번)을
지정된 소켓에서 일정시간동안 제대로된 TCP/IP 패킷이 없을시 무언가 시스템에 문제가 있다고 판단하여 해당 소켓을 닫았다가 다시 열려고 합니다. 소켓을 하나만 열면 그냥 W5500 리셋후 처음부터 다시 시작하면 되는데 소켓을 2개를 열어야되니 다른 소켓에 영향을 끼치면 안됩니다.

소켓을 닫을시 현재 소켓의 status와 관계없이 그냥 바로 Sn_CR에 0x10을 써버리면 바로 소켓이 닫히나요?

그리고 나서 Sn_Sr을 체크 하여 소켓이 닫힌것을 확인 한 후, 다시 처음부터 소켓 Initialization을 하면 해당 소켓에 한해서는 W5500을 Reset했다가 다시 ON 시킨것 과 같은 효과가 있는지 궁금 합니다.

아 그리고 소켓 close 명령을 내린후 약 얼마시간동안 기다려야 status가 0x00(CLOSED)로 되는지 궁금합니다.

감사합니다.


#2

말씀하신대로 하시면 될것 같습니다.

참고로, TCP SOCKET은 DISCONN(0x08)도 지원하지만, 상대방의 Ack가 필요없을 경우 CLOSE(0x10)으로 Close할 수 있습니다.
또한 Client 모드로 동작시킬때, 소스 포트 넘버는 이전값과 다른값을 갖도록 설정하는게 좋습니다. 같은 소스 포트를 사용할 경우 접속이 안될 수 있습니다.


#3

소켓을 close 한 이후 재 open할 경우 약 10ms 정도의 여유를 두시는 것을 추천드립니다.


#4

아 죄송합니다. Listener모드니 Server 모드 였네요.

이경우에도 상관 없는가요?(소켓을 닫아버릴 경우 Client측에서는 다시 연결을 해야 하지만).

이 경우에도 소켓을 번호(0~7)를 다른것으로 바꿔야 하나요?

포트 번호 어플리케이션끼리 미리 정해놓고 쓰는거라 바꿀수 없을것 같습니다.

감사합니다.


#5

상관없는 것 같습니다.
그리고, 소켓 번호 변경은 하지 않아도 됩니다.
말씀하신대로 서버 모드이므로 당연히 미리 정해놓은 포트 넘버는 바꾸면 안되겠죠.