?
Solved

Open Multiple Internet Sessions

Posted on 2000-04-09
9
Medium Priority
?
549 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
  • 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
Industry Leaders: 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!

 
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

Vote for the Most Valuable Expert

It’s time to recognize experts that go above and beyond with helpful solutions and engagement on site. Choose from the top experts in the Hall of Fame or on the right rail of your favorite topic page. Look for the blue “Nominate” button on their profile to vote.

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: Dynamic window placements and drawing on a form, simple usage of windows registry as a storage place for information. Continuing from the first article about sudoku.  There we have designed the application and put a lot of user int…
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.
Is your data getting by on basic protection measures? In today’s climate of debilitating malware and ransomware—like WannaCry—that may not be enough. You need to establish more than basics, like a recovery plan that protects both data and endpoints.…
Suggested Courses

839 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