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...

History



Comments

  • cut + paste ???

    Posted by Legacy on 08/10/1999 12:00am

    Originally posted by: homer

    don't you mean this ...
    
    

    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);
    }
    }

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • With JRebel, developers get to see their code changes immediately, fine-tune their code with incremental changes, debug, explore and deploy their code with ease (both locally and remotely), and ultimately spend more time coding instead of waiting for the dreaded application redeploy to finish. Every time a developer tests a code change it takes minutes to build and deploy the application. JRebel keeps the app server running at all times, so testing is instantaneous and interactive.

  • You probably have several goals for your patient portal of choice. Is "community" one of them? With a bevy of vendors offering portal solutions, it can be challenging for a hospital to know where to start. Fortunately, YourCareCommunity helps ease the decision-making process. Read this white paper to learn more. "3 Ways Clinicians can Leverage a Patient Portal to Craft a Healthcare Community" is a published document owned by www.medhost.com

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds