그냥 사는 이야기

IcmpCreateFile() 의 handle은 꼭 IcmpCloseHandle()을 해주자 본문

Development/System

IcmpCreateFile() 의 handle은 꼭 IcmpCloseHandle()을 해주자

없다캐라 2009. 4. 16. 18:59
반응형

핸들을 하나 생성하면 제거 해줘야 하는데 이상하게 MSDN 의 예제나 다른 사람들의 블로그에 잘못된 예가 올라와 있어 글을 남긴다.

ICMP를 통해 ping test 하는 부분에서 메모리 leak이 많이 발생했다. 처음 봤을 때는 별 문제 없는 것 같아보였다. ICMP API는 처음 다뤄 보는 것이지만 메모리릭만 찾으면 되니깐,

HANDLE hIcmpFile = IcmpCreateFile();
:
dwRetVal = IcmpSendEcho(hIcmpFile,ulDestAddr,SendData,nSendSize,NULL,ReplyBuffer,nRecvSize,dwTimeout);
:
CloseHandle(hIcmpFile);

CloseHandle()이 아니다

그런데, 그걸 MSDN의 예제에서는 handle을 close 해주려는 부분 자체가 없다. 그래서 혹시나 해서 CloseHandle부분을 주석처리해주니 예외는 발생하지 않지만 역시나 메모리 릭이 생겼다.

그래서 구글로 찾은 것이 첨부된 문서에서 IcmpCloseHandle()를 찾았다.

msdn의 예제에도 언급되어 있지 않고 IcmpCreateFile() 부분에서도 언급되어 있지 않고 최소한 Remark에 해제에 대한 언급이 있어야 되는데 그렇지 않았다.

http://msdn.microsoft.com/en-us/library/aa366045(VS.85).aspx

쩝. 눈썰미 좋은 사람은 IcmpCloseHandle()을 찾던지 하겠지. 

그런데, 예전엔 CloseHandle()로 close가 정상적으로 되었었나? 왜 잘못된 예제가 돌아다니는지 모르겠다.

Comments