× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.


  • Subject: Re: Memory allocation
  • From: "Alexei Pytel" <pytel@xxxxxxxxxx>
  • Date: Tue, 24 Jul 2001 20:31:16 -0500


TCP (as opposed to UDP) is not packet-based - it is a byte stream.
Data trickles through the network and gets accumulated on receiving end.
There is a limit, how much can be accumulated before sending host will be
instructed to stop sending - on iSeries it is controlled by a setting in
CHGTCPA command.
On the other side, quite asynchronously, receiving program will do
receives.
Within this limit you basically get what was available at the time you
issued recv().
TCP specification does not define, that if you have sent so many bytes, you
will receive them in any particular number of chunks of any particular
size. In can be totally random.
The only thing TCP guarantees is that eventually you will receive all the
bytes in correct order.

In other words - if you recv() to 32K buffer, do not expect that you will
get 32K chunks.

Hope this helps.

    Alexei Pytel

"The better is the worst enemy of the good"




                                                                                
                     
                    PatrickConner@parkdal                                       
                     
                    emills.com                  To:     RPG400-L@midrange.com   
                     
                    Sent by:                    cc:                             
                     
                    owner-rpg400-l@midran       Subject:     Re: Memory 
allocation                   
                    ge.com                                                      
                     
                                                                                
                     
                                                                                
                     
                    07/24/2001 07:44 PM                                         
                     
                    Please respond to                                           
                     
                    RPG400-L                                                    
                     
                                                                                
                     
                                                                                
                     



I knew my first question was too vague when I read your first reply. The
idea is I'm expecting to read 32K chunks of a 200K transmission. Because I
know 32K is what I set to be the max for a read. Instead, I get random
sizes on my reads. I check the network traffic and see that packet sizes
are only a few hundred bytes. So, based on below the iSeries is buffering
but not up to 32K. My question is what determines the size of reads that I
am receiving? Or to match your reply, what determines the size of the
system's buffer for that socket?


By the way, thanks for your and the others help so far. This is great
feedback.


Patrick Conner
www.ConnecTown.com
(828) 244-0822



Scott Klement <klemscot@klements.com>
On Tue, 24 Jul 2001 PatrickConner@parkdalemills.com wrote:

> For an example: I received a document that took four reads that arrived
> in the following sequence. First read: 108; Second read: 16,832; Third
> read: 16,832; Fourth read: 8,586. I then received the exact same document
> again and it arrived as 108; 21,152; 16,832; 4,266. It seems to me that
> the iSeries is buffering the input somewhere.

Yes, it is buffered.  Remember that your system is switching between many
different tasks, and doing many different things.   Any data that it
didn't buffer would be lost, since the system wouldn't be reading data
coming into the network card 100% of the time.

It's not expected to be consistent.   The read() or recv() API will input
as much data as is available in the system's buffer for that socket.


+--- | This is the RPG/400 Mailing List! | To submit a new message, send
your mail to RPG400-L@midrange.com. | To subscribe to this list send email
to RPG400-L-SUB@midrange.com. | To unsubscribe from this list send email to
RPG400-L-UNSUB@midrange.com. | Questions should be directed to the list
owner/operator: david@midrange.com +---







+---
| This is the RPG/400 Mailing List!
| To submit a new message, send your mail to RPG400-L@midrange.com.
| To subscribe to this list send email to RPG400-L-SUB@midrange.com.
| To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---

As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.