|
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 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.