|
아마도.. 같은 케이스가 아니거나, 혹은 이전에 패치된 다른 버그인 듯 합니다.
여러가지로 테스트해봤었는데, 제가 테스트한 바로는 Close()를 호출한 것으로는 소용이 없더군요.
VCL의 소스코드에서도 이런 경우에 연결이 실패하면 Close()는 호출하도록 되어있습니다.
이미 Close()를 호출한 이후이기 때문에 다시 Close()를 호출해도 아무런 동작도 하지 않고 바로 리턴되며,
따라서 핸들은 계속 증가합니다.
이 문제는 델파이 VCL 소켓에서도 똑같이 발생하며, Win32 VCL의 최신 버전인 델파이 7 업데이트 1에서도
동일하게 발생합니다. (문제가 있는 해당 부분의 소스가 똑같습니다.)
참고하시라고 써봤습니다.
그럼...
버그 버그 님이 쓰신 글 :
: 뒷북인지 모르겠지만 저도 전에 이런 현상때문에 고민을 한적이 있었읍니다.
:
: 클라이언트 소캣을 한번 열때마다 두개의 핸들이 생성이 되더군요..
:
: 저도 질문하신 분과 같이 초당 계속해서 연결을 시도하는 프로그램을 만들었었는데..연결이 안될때마다.계속해서 핸들이 증가하는 현상을 보이더군요..
:
: 그래서..보통..타이머로 소캣을 시작한다면..ClientSocket->Open()을 하기전에 ClientSocket->Socket->Close()인가를 호출해주니깐..핸들의 증가 현상이 일어나지 않았습니다.
:
: 제가 생각하기로는 ClientSocket이 Socket을 한번더 랩퍼한 컴포넌트라 그 부분에 대해서 처리를 하지 않은듯 합니다. 만든사람의 실수겠죠..Open()하고 다시 Open()하면..전에 만들었는 핸들을 닫아 주기만 해도 좋았을텐데 말이죠..^^
:
: 뒷북쳤다 생각 마시고 이곳에 올라온 글은..여러 사람이 읽으니 그냥..애교로 봐주시면 감사 하겠습니다.^^
:
: 그럼..즐프요..^^
|