Most Politically Correct Way To Call RasHangUp
Environment: VC5-6, Win9x-NT4
Problem
The RasHangUp function terminates a remote access connection. The connection is specified with a RAS connection handle. The function releases all RASAPI32.DLL resources associated with the handle. (MSDN)
Then, in remarks, it is mentioned that application should sleep about 3
seconds, or until RasGetConnectStatus returns ERROR_INVALID_HANDLE.
In article
Disconnect Dialup Connection author don't carry about that but
if you realy just call RasHangUp and exit - you can "hang" both
modem and rnaapp (application that implement Dial-Up Service).
Furthermore, if you do everything as described in MSDN you still may
receive the following error message:
RNAAPP caused an invalid page fault in module xxxx.
Solution
This problem was a besetting sin when I wrote my Dial-up dialer program, until I found solution that work in my program now:
DWORD dwRet;
RASCONNSTATUS rStatus;
ZeroMemory(&rStatus, sizeof(RASCONNSTATUS));
rStatus.dwSize = sizeof(RASCONNSTATUS);
dwRet = RasGetConnectStatus(hRasConn, &rStatus);
if (dwRet != ERROR_INVALID_HANDLE)
{
RasHangUp(hRasConn); // hRasConn - valid handle to the RAS connection
MSG msg;
while (dwRet != ERROR_INVALID_HANDLE)
{
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
dwRet = RasGetConnectStatus(hRasConn, &rStatus);
}
Actually, I remove some unimportant shuff so check this code before using...

Comments
cut + paste ???
Posted by Legacy on 08/10/1999 12:00amOriginally posted by: homer
Reply