동일한 로컬 포트에서 TCP 연결을 닫고 열 때 발생하는 에러 60 해결 방안

업데이트 됨 Dec 18, 2023

해당 제품

소프트웨어

  • LabVIEW

문의사항

RT 컨트롤러를 사용하고 있으며 특정 로컬 포트에서 TCP 연결을 여는 중입니다. 연결을 닫은 후에 즉시 동일한 로컬 포트에서 다시 열때, TCP Open Connection VI는 아래 에러가 발생합니다 : Error 60 occurred at TCP Open Connection in MyVI.vi. 저의 TCP 코드는 아래 스니핏 그림과 같습니다.
왜 이런 일이 발생하며, 어떻게 해결할 수 있습니까?

해결책

이 문제는 TCP/IP 스택의 특정한 동작 방식으로 인하여 발생됩니다. 이 문제는 VxWorks 및 Linux RT와 같은 다른 운영체제에서도 동일하게 발생합니다. 이 이슈는 TCP TIME-WAIT 상태라고하며 TCP의 연결을 종료 한 후 약 1 분 동안 새로운 접속을 차단합니다. 이렇게 처리되는 이유는 이전 연결 상태에서 전달된 메시지가 상대방에게 전달되지 않고, 접속이 종료되었을 경우 새 연결에서 이 메시지를 받지 않도록 처리하기 위함입니다. 

일반적으로, 운영 체제가 로컬 포트 번호를 선택하도록하는 것이 가장 좋습니다. 특정 로컬 포트를 사용해야 하는 경우, 연결을 닫은 후 다시 열어서 TIME-WAIT 상태가 완료 될 때까지 몇 분 정도 기다려야합니다. Linux RT 대상 (cRIO-906x 및 903x)의 경우 동일한 TCP 포트를 즉시 재사용해야하는 경우 다음 토큰을 추가하여 lvrt.conf 파일을 수정할 수 있습니다: SocketSetReuseAddr = True
lvrt.conf 파일은 /files/etc/natinst/share/ 폴더에 저장됩니다.