|
위에서 가르쳐주신 소켓에러를 가로채는 방법을 사용했더니 프로그램이 더이상 소켓을 사용하지 못하는 문제가 생기더군요.
그래서 여기저기를 다시금 기웃거리다가 소켓을 close하는 방법이 2가지라는 사실을 알게 되었습니다.
방법1) ClientSocket1->Socket->Close()
방법2) ClientSocket1->Close()
저는 지금껏 (방법2)로 소켓을 닫아주었는데 이것이 소켓을 완전히 닫아주는게 아닌 듯 싶습니다.
여기서 저와 같은 문제로 고생하시는 분을 위해 몇줄에 걸쳐 제가 겪은 에러에 대해서 시간대 별로 정리를 해보면 이렇습니다.
1) 서버소켓 접속시 에러가 발생하는 경우에 소켓에러 메시지 창이 직접 열리는 문제로 고심
2) 에러처리 루틴에 ErrorCode = 0; 라인을 한줄 추가하여 해결
3) 서버소켓 접속에 실패하여 에러가 발생하면 상기의 (방법2)로 클라이언트 소켓을 닫아주고는 다시 서버소켓 접속을 시도하는 루프 구성
4) 처음엔 문제 없이 서버 접속을 시도-실패-시도-실패- 하는 루프를 실행하지만 247번째 에러 발생시에는 새로운 형태의 서버 접속 에러발생
5) 관리자님이 일러주신 소켓에러를 가로채는 방법을 적용해봤으나 프로그램에서 더 이상 소켓을 사용하지 못하는 문제 발생
6) 새로운 방안을 찾아헤매다가 상기의 (방법 1)로 소켓을 닫아줄 수도 있다는 사실 발견
7) (방법 1)을 (방법 2)의 코드를 모두 대체했더니 시스템이 다운되는 현상이 발생
8) 원인을 찾아헤매다가 불필요하게 (방법 1)로 소켓을 close해주는 경우에 스택오버플로 메시지 등과 함께 시스템이 다운된다는 사실 발견
10) (방법 1)을 서버접속 에러함수에만 국한시켜서 적용했더니 상기 247번째 발생하던 에러표시가 사라짐 -> 현재 1137번이 넘었는대도 계속 잘 진행 중에 있습니다!!
* 상기의 경험과 에러해결을 위해 여기저기서 주워읽은 내용을 토대로 나름대로 내린 결론은 다음과 같습니다.
클라이언트 소켓은 최대 256개를 열수가 있다. 제가 상기에서 247번째에서 발생하는 에러를 경험한 것은 (방법2)로 소켓을 close해준 데 있다. 이론적으로는 256개의 소켓을 열수가 있지만 이보다 적은 수의 소켓을 열수가 있는데, 본인의 경우 사무실에서는 247번째에서 에러가 발생하였고 집에서는 251번째 혹은 253번째에 에러가 발생하였다.
예상되는 이유는 (방법2)가 실질적으로 소켓을 닫아주지 않기 때문이다???????
즉 (방법1)이 실제적으로 현재의 소켓을 닫아준다고 생각된다.
!!!!! 고수님 이거 제 결론이 맞는 겁니까?? !!!!!
!!!!! 시원스럽게 정리 좀 해주세요 !!!!!
|