The MFC socket functions may fail and return an error when you call MFC socket functions from ExitInstance of a DLL (196836)
The information in this article applies to:
- The Microsoft Foundation Classes (MFC), when used with:
- Microsoft Visual C++, 32-bit Editions 4.0
- Microsoft Visual C++, 32-bit Editions 4.1
- Microsoft Visual C++, 32-bit Enterprise Edition 4.2
- Microsoft Visual C++, 32-bit Professional Edition 4.2
- Microsoft Visual C++, 32-bit Enterprise Edition 5.0
- Microsoft Visual C++, 32-bit Professional Edition 5.0
- Microsoft Visual C++, 32-bit Enterprise Edition 6.0
- Microsoft Visual C++, 32-bit Professional Edition 6.0
- Microsoft Visual C++, 32-bit Learning Edition 6.0
This article was previously published under Q196836 SYMPTOMS
When you call MFC socket functions from ExitInstance of a DLL, the
functions may fail and return an error.
CAUSE
In an MFC DLL, the CWinApp::ExitInstance function is called from the
DllMain function in response to the DLL_PROCESS_DETACH case.
The MFC socket functions call the WinSock APIs implemented in wsock32.dll.
When an application shuts down, the DllMain with DLL_PROCESS_DETACH of the
WinSock DLL may be called before the DllMain of the MFC regular DLL. This
can cause some process specific information to be lost.
NOTE: This problem applies to non-MFC DLLs and non-MFC sockets as well.
RESOLUTION
Do not call socket functions from CWinApp::ExitInstance
(DLL_PROCESS_DETACH). Provide a cleanup function that the application can
call to perform the last socket functions.
STATUS
This behavior is by design.
MORE INFORMATION
A common mistake is to call the CSocket::Close (or CAsyncSocket::Close)
function in CWinApp::ExitInstance. This can generate an assertion in
sockcore.cpp line 856 in Microsoft Visual C++ 5.0, and line 667 in
Microsoft Visual C++ 6.0.
(c) Microsoft Corporation 1998, All Rights Reserved.
Contributions by Adam Kim, Microsoft Corporation.
Modification Type: | Major | Last Reviewed: | 6/8/2005 |
---|
Keywords: | kbtshoot kbDLL kbprb kbWinsock KB196836 kbAudDeveloper |
---|
|