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
Solved

Open Multiple Internet Sessions

Posted on 2000-04-09
9
507 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 50 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
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
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

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Introduction: Load and Save to file, Document-View interaction inside the SDI. Continuing from the second article about sudoku.   Open the project in visual studio. From the class view select CSudokuDoc and double click to open the header …
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
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.
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

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