C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[35612] Re:[질문] TClientSocket->Open()에서 계속 핸들수가 증가합니다.
박지훈.임프 [cbuilder] 4863 읽음    2004-06-12 15:36
연결되지 않는 서버에 지속적으로 연결을 시도하는 경우는 흔하지 않아 저도 몰랐는데...
TClientSocket의 버그인 듯 합니다. (참고로 델파이 6, 7에서도 똑같이 리소스가 새더군요)
VCL의 소켓 관련 소스를 보니 핸들 관리에 있어 의심스러운 부분이 있습니다.

어쨌든 증상을 정리하면...
TClientSocket을 넌블로킹 방식으로 오픈했을 때, 연결이 실패하면 총 핸들이 몇개씩 증가합니다.
블로킹 방식일 때는 관계가 없고, 넌블로킹에서만 발생합니다. 또, OnError 이벤트에서 ErrorCode = 0 코드를
넣지 않아 예외가 일어나는 경우에도 핸들은 누출되지 않습니다.

버그인 것은 거의 틀림없어보이지만, 몇가지로 시도해보니 해결책은 있습니다.
가장 먼저 생각해볼 수 있는 것은 블로킹 방식으로 바꾸는 것입니다. 하지만 이렇게 하려면 코드를 꽤 고쳐야
할 것이므로, 다른 해결책을 찾아봤습니다.

OnError 이벤트에서 다음 코드를 추가하세요.
ClientSocket1->Socket->Disconnect(ClientSocket1->Socket->SocketHandle);

이렇게 해두면 핸들 갯수가 계속 증가하지 않습니다.
OnError가 아니라 다음번 Open() 하기 직전에 위 코드를 추가해도 되긴 하지만, 이상하게 OnError에서 추가한
것보단 총 핸들 갯수가 몇개 정도 더 많더군요.

그럼...


김태우 님이 쓰신 글 :
: (여기서 말하는 "핸들"은 Ctrl+Alt+Delete를 누르면 나오는 작업관리자에서
: "프로세스"창에 나오는 핸들을 말합니다.)
:
: TClientSocket를 이용하여 프로그래밍을 하고 있습니다.
: 그런데 TClientSocket가 연결이 안되는 IP로 접속을 시도하고
: SocketError이벤트가 발생한 후, 타이머에 의해 다시 TClientSocket->Open()을 호출하면
: 핸들이 3정도씩 증가합니다.
:
: ErrorCode는 10060,10061로 오고, SocketErrorEvent에서는 다른것은 안해주고
: "ErrorCode=0"이라고만 적어주었습니다. 그 후에 타이머에 의해서 다시
: TClient->Open()을 호출하는데 여기서 핸들이 증가됩니다.
:
: 이게 하루정도 지나면 3000~4000개 정도로 증가되고, 결국은 죽어버립니다.
: 이거 왜이러는 거죠.
:
: 이것때문에 계속 욕먹고 있습니다. 아시는분은 좀 도와주세요~~~~~
:
: ***핸들이 증가된 모습을 캡춰하여 첨부하였으니 참고해 주시면 감사하겠습니다.

+ -

관련 글 리스트
35581 [질문] TClientSocket->Open()에서 계속 핸들수가 증가합니다. 김태우 1661 2004/06/11
35612     Re:[질문] TClientSocket->Open()에서 계속 핸들수가 증가합니다. 박지훈.임프 4863 2004/06/12
35626         Re:Re:[질문] TClientSocket->Open()에서 계속 핸들수가 증가합니다. 버그 버그 1956 2004/06/13
35628             Re:Re:Re:[질문] TClientSocket->Open()에서 계속 핸들수가 증가합니다. 박지훈.임프 2208 2004/06/13
35659                 Re:Re:Re:Re:[질문] TClientSocket->Open()에서 계속 핸들수가 증가합니다. 버그 버그 1901 2004/06/15
35660                     같은 코드군요. 박지훈.임프 1706 2004/06/15
35620         Re:Re:[질문] TClientSocket->Open()에서 계속 핸들수가 증가합니다. 김태우 1693 2004/06/12
35622             Re:Re:Re:[질문] TClientSocket->Open()에서 계속 핸들수가 증가합니다. 박지훈.임프 1769 2004/06/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.