Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

AfxSocketInit() Mem Leak? Pls. Help...

Posted on 2000-03-16
6
Medium Priority
?
630 Views
Last Modified: 2013-12-14
Hi,
I have a MFC (no GUI) application. It's a NT service and it's multithreaded by using the SDK not the MFC heavy stuff.
The application is statically linked to MFC.

I have the followings for initializing:


int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
      int      nRetCode = 0;
      // initialize MFC and print and error on failure
      if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
      {
            // TODO: change error code to suit your needs
            cerr << _T("Fatal Error: MFC initialization failed") << endl;
            nRetCode = 1;
      }

      WSADATA lpwsaData;
      if ( !AfxSocketInit( &lpwsaData ) )
      {
            cerr << _T("Fatal Error: Could NOT Initialize Windows Sockets!") << endl;
            nRetCode = 1;
      }
      ....
      
}

When I stop the application I get few lines of memory leaks:


[!!! Warning !!!]( 307): Detected memory leaks!
[!!! Warning !!!]( 307): Dumping objects ->
[!!! Warning !!!]( 307): sockcore.cpp(88) :
[!!! Warning !!!]( 307): {45}
[!!! Warning !!!]( 307): client block at 0x00C103A0, subtype 0, 28 bytes long.
[!!! Warning !!!]( 307): a CPtrList object at $00C103A0, 28 bytes long
[!!! Warning !!!]( 307): sockcore.cpp(86) :
[!!! Warning !!!]( 307): {44}
[!!! Warning !!!]( 307): client block at 0x00C103F0, subtype 0, 28 bytes long.
[!!! Warning !!!]( 307): a CMapPtrToPtr object at $00C103F0, 28 bytes long
[!!! Warning !!!]( 307): sockcore.cpp(84) :
[!!! Warning !!!]( 307): {43}
[!!! Warning !!!]( 307): client block at 0x00C10D40, subtype 0, 28 bytes long.
[!!! Warning !!!]( 307): a CMapPtrToPtr object at $00C10D40, 28 bytes long
[!!! Warning !!!]( 307): Object dump complete.



If I simply remove the AfxSocketInit() call all works perfect.
Why? As I see the AfxSocketInit() makes some memory leaks.
There is a question in the MSDN: Q193101 that says that the problem with multithreaded statically linked MFC applications and AfxSocketInit() has been solved in VS6SP3.
I do have VS6SP3.
What is wrong and how can I solve this ?

Thanks,
Corneliu

Corneliu I. Tusnea
Infopulse Romania

0
Comment
Question by:CorneliuTusnea
  • 3
  • 2
6 Comments
 

Expert Comment

by:wardkd
ID: 2627200
I have written winsock applications as NT services in the past with no problems. However, I didn't use any mfc extensions at all -use the straight winsock api and you'll have no problem.
0
 

Author Comment

by:CorneliuTusnea
ID: 2627264
Ok,
I understand you, buy I want to use CSockets :-)

Thanks anyway,
Corneliu.
0
 
LVL 9

Accepted Solution

by:
ShaunWilde earned 800 total points
ID: 2627400
you need to have a CWinApp object as this will destroy the structures for you when it terminates.

0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
LVL 9

Expert Comment

by:ShaunWilde
ID: 2627414
also have you tried a call to AfxSocketTerm() at the end - it isn't documentated but it does sit side by side with AfxSocketInit in the MFC source
0
 

Author Comment

by:CorneliuTusnea
ID: 2627422
Great,
The answer was no good, I already knew that, but the comment was excellent :-))

Thanks.
0
 
LVL 9

Expert Comment

by:ShaunWilde
ID: 2627425
(I have just looked deeper into the code and...)
forget AfxSocketTerm you'll have to go the CWinApp route for it to tidy up correctly.

0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Many modern programming languages support the concept of a property -- a class member that combines characteristics of both a data member and a method.  These are sometimes called "smart fields" because you can add logic that is applied automaticall…
How to install Selenium IDE and loops for quick automated testing. Get Selenium IDE from http://seleniumhq.org Go to that link and select download selenium in the right hand column That will then direct you to their download page. From that p…
THe viewer will learn how to use NetBeans IDE 8.0 for Windows to perform CRUD operations on a MySql database.
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…

581 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question