본문 바로가기

진리는어디에

소켓 프로그래밍 - '네트워크에 중복된 이름이 있기 때문에 연결되지 않았습니다'

윈도우 소켓 프로그래밍을 할때 특히 대량 접속 프로그램을 만들때 저 에러가 뜬다면 프로세스에서 생성 할수 있는 소켓이 한계에 도달했다는 의미다.

프로그램이 active close를 하고 있는지 확인하고, 만일 active close를 하고 있다면 linger option을 꺼줘야 한다.

여기서 active close라는 것은 상대방이 close를 하는 것이아니라 프로그램 자신이 close를 호출하는 것을 의미한다. close를 호출하는 쪽은 TIME_WAIT 상태에 빠지게 되어 일정 시간동안 소켓 리소스를 해제하지 않고 유지하게 된다. 예를 들어 서버라면 수많은 클라이언트들이 접속을 할텐데 그 연결들에 대해 서버가 close를 호출하게 되면 TIME_WAIT에 빠진 소켓들을 다른 클라이언트로 부터의 연결 요청에 할당 해줄 수 없게 된다.

그래서 해결 방법으로 TIME_WAIT 상태에 빠지지 않도록 상대측에서 close를 호출 하도록 하거나, 그럴수 없는 상황이라면 linger 소켓 옵션을 활성화하여 소켓 리소스를 재사용 가능한 상태로 돌려줘야 한다.

TIME_WAIT에 관련된 자세한 사항은 [여기]를 참고 하도록 하자.

부록 1. 같이 읽으면 좋은 글

 

 

유익한 글이었다면 공감(❤) 버튼 꾹!! 추가 문의 사항은 댓글로!!