CSocket in ISAPI

I have tried CSocket function in ISAPI DLL Extension. In the project settings, if I used "Use MFC in

a shared DLL", the program is working fine and giving me a proper output. But, If I try to use "Use

MFC in a static library" it is not giving output.

Any of you can tell me, how to fix this.

Thanks in Advance,
Who is Participating?
aponcealbuerneConnect With a Mentor Commented:

An MFC application that uses MFC's socket classes (CSocket and CAsyncSocket) and statically links with MFC causes a general protection (GP) fault on exit. The GP fault occurs on the following line in SOCKCORE.CPP:


   if (_afxSockState->lpfnSockCleanup != NULL)

This error occurs if the application contains a call to AfxSocketInit but for some reason terminates without ever actually calling that function. It will also occur if the call to AfxSocketInit fails.

The MFC socket implementation maintains a static pointer to a structure that maintains socket state information. This variable is defined in SOCKCORE.CPP as:

   static AFX_SOCKSTATE* _afxSockState;

_afxSockState is initialized when an application calls AfxSocketInit. However if an application does not call AfxSocketInit or the call to AfxSocketInit fails, the variable is not initialized, and the 'if' statement shown above attempts to remove the reference to a NULL pointer, which causes the GP fault.


This problem occurs only if your application statically links with MFC. If your application uses the DLL version of MFC (MFC250(D).DLL), this problem does not occur. To learn how to use the DLL version of MFC, please see MFC TechNote #33. In particular, examine the section titled:

      "Writing An Application that Uses the DLL Version"

NOTE: In order to use the DLL version of MFC with a sockets app, you also need to link with MFCN250(D), which contains the definitions for the CSocket and CAsyncSocket members.

Force the application to call AfxSocketInit. This causes the variable to be properly initialized when socket support is available. However the problem still occurs if AfxSocketInit fails.

If your application links statically to MFC, you can rebuild the static MFC library with a fix to the problem. To fix the problem, change the following code located on line 32 of SOCKCORE.CPP in the MFC\SRC directory:
Change this line:

      if (_afxSockState->lpfnSockCleanup != NULL)

To this line:

      if((_afxSockState!=NULL) && (_afxSockState->lpfnSockCleanup!=NULL))

Once the change has been made, you can rebuild the MFC static library to incorporate the change. For details on how to rebuild the MFC static library, please see the README.TXT file in the MFC\SRC directory and Appendix B of the Class Library User's Guide.

IMPORTANT: Remember that the problem only exists in the static library, so you should not rebuild the MFC DLL (MFC250(D).DLL).
DanRollinsConnect With a Mentor Commented:
Search in MSDN for

It will show you how to put debug tracing messages and use messageboxes in your ISAPI DLL.  This will help you track down the error.

-- Dan
Roshan DavisCommented:
No comment has been added lately, so it's time to clean up this TA.
I will leave a recommendation in the Cleanup topic area that this question is:

Answered by: aponcealbuerne, DanRollins (points to be split)

Please leave any comments here within the next seven days.


Roshan Davis
EE Cleanup Volunteer
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.