that's not true. asio will throw an
"boost::asio::error::operation_aborted" error-code.

Ok, I tried this:

    try{
        m_SerialPort.close();
    }catch( const std::exception& ex ){
    }

But I got this error:

Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.  This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

Should I rebuild the boost libraries so that they use another convention? Which one? Our solution is a Visual Studio 2010 SP1 one, and has C# and VB.NET assemblies which talk to unmanaged C++ dlls through C++/CLI dlls. Very nice, huh? I never messed around with calling conventions, I'm currently investigating the subject so don't assume I know too much.