?
Solved

Open Multiple Internet Sessions

Posted on 2000-04-09
9
Medium Priority
?
532 Views
Last Modified: 2013-11-20
Working With NT, VC6.

I Opened 100 threads
and In Each Thread opened an Internet session.

CInternetSession MySession;
pFile = MySession.OpenURL(url);

I See that 100 threads are running
but somehow in every moment only 2 Sessions are really working.

It seems that NT closes the session whenever it wants...

(I`m using 'netstat' from command prompt)

How can I really open 100 sessions
at the same time?



======================================

int LoadURL(const char* url,char* buffer,int bufferSize)
{
  CInternetSession MySession;
  CStdioFile* pFile = NULL;

   pFile = MySession.OpenURL(url);
   Sleep(10000);
   while (pFile->Read   (buffer,bufferSize) > 0)
   {
     //read file...
   }
     
   delete pFile;
   MySession.Close();
   
}

0
Comment
Question by:TelMic
[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
  • 5
  • 4
9 Comments
 
LVL 11

Accepted Solution

by:
mikeblas earned 200 total points
ID: 2698199
100 threads?  That's absolutely silly; you're wasting more time than you're actually getting work done.  If you've used the default stack size, 100 threads is going to take 100 megs of memory--and that's going to leave you swapping all over the place, unless you have more than 256 megabytes of memory.

Please reconsider your design: you need to do things that will work, and work right--not just throw threads at the problem.

Anyway, that that your client only lets two threads run is completely by design. WININET.DLL is implemented per the HTTP specification, which stipulates that a client should only have two active sessions open against any given server at any time. That's to avoid the client from overpowering the server--something you're bound to do if you ever get those 100 threads of yours running efficiently.

I'm loathe to tell you this because, given your use of 100 threads in your app, you're doubtlessly going to abuse it. But you can hack the registry to get around the limit.

For connections using  HTTP/1.0, you should set the DWORD at HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\InternetSettings\MaxConnectionsPerServer . And for connections using HTTP/1.1, you can set the DWORD at HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\InternetSettings\MaxConnectionsPer1_0Server REG_DWORD (HTTP/1.0 limit) .

Note that this setting effects _all_ apps that use WININET and not just your app, so it's possible you'll break something else on your system by changing the setting.

..B ekiM
0
 
LVL 11

Expert Comment

by:mikeblas
ID: 2698203
Why in the world do you sleep 10 seconds after opening the URL?

..B ekiM
0
 

Author Comment

by:TelMic
ID: 2705324
thanks mikeblas,

Thanks,

The only problem is that I get
Sometimes InternetException with Error Code 12002 and others how can I know what does any Error Code Mean...
0
Moving data to the cloud? Find out if you’re ready

Before moving to the cloud, it is important to carefully define your db needs, plan for the migration & understand prod. environment. This wp explains how to define what you need from a cloud provider, plan for the migration & what putting a cloud solution into practice entails.

 
LVL 11

Expert Comment

by:mikeblas
ID: 2705997
> how can I know what does any Error Code Mean...

Use the ERRLOOK tool.  It's in the Tools menu in the Visual C++ IDE, and it's installed to be on the path after you setup VC++.

Or, use the ReportError() or GetErrorMessage() member functions of CInternetException.

..B ekiM
0
 

Author Comment

by:TelMic
ID: 2709448
GetErrorMessage() is not a member
of CInternetException
0
 
LVL 11

Expert Comment

by:mikeblas
ID: 2710264
> GetErrorMessage() is not a member
 > of CInternetException

I'm sorry, but it is. I know it is because I'm the one who added it to MFC. If you're using Visual C++ 6.0, see line 2754 of INET.CPP in the MFC\SRC directory.

..B ekiM
0
 

Author Comment

by:TelMic
ID: 2722362
The Error I get is "The operation is timed out",
because I`m sending a lot of request,

Is there is any way to change the TimeOut for OpenURL()?

Thanks.
0
 
LVL 11

Expert Comment

by:mikeblas
ID: 2729054
Yes. Before calling OpenURL() on the session, call SetOption() on the session object. Use these options to set the time out parameters:

INTERNET_OPTION_CONNECT_RETRIES
INTERNET_OPTION_CONNECT_TIMEOUT
INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT
INTERNET_OPTION_CONTROL_SEND_TIMEOUT
INTERNET_DATA_RECIEVE_TIMEOUT
INTERENT_DATA_SEND_TIMEOUT
INTERNET_OPTION_RECEIVE_TIMEOUT
INTERNET_OPTION_SEND_TIMEOUT

Read the docs to learn what they do; some are meaningful only for cetain protocols. But they're all local to your session, so it's not as if you'll harm another program by changing them.

Please also read Knowledgebase Articles Q224318 and Q176420.

..B ekiM
0
 

Author Comment

by:TelMic
ID: 2741882
Thanks a lot!
0

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

Question has a verified solution.

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

Here is how to use MFC's automatic Radio Button handling in your dialog boxes and forms.  Beginner programmers usually start with a OnClick handler for each radio button and that's just not the right way to go.  MFC has a very cool system for handli…
Introduction: Finishing the grid – keyboard support for arrow keys to manoeuvre, entering the numbers.  The PreTranslateMessage function is to be used to intercept and respond to keyboard events. Continuing from the fourth article about sudoku. …
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
Michael from AdRem Software outlines event notifications and Automatic Corrective Actions in network monitoring. Automatic Corrective Actions are scripts, which can automatically run upon discovery of a certain undesirable condition in your network.…
Suggested Courses

771 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