Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

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

Posted on 2000-03-16
6
Medium Priority
?
588 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
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

Tech or Treat! - Giveaway

Submit an article about your scariest tech experience—and the solution—and you’ll be automatically entered to win one of 4 fantastic tech gadgets.

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…
Update (December 2011): Since this article was published, the things have changed for good for Android native developers. The Sequoyah Project (http://www.eclipse.org/sequoyah/) automates most of the tasks discussed in this article. You can even fin…
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.
Suggested Courses

610 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