Re: Network buffering question
- From: "Scott McPhillips [MVP]" <org-dot-mvps-at-scottmcp>
- Date: Mon, 28 Aug 2006 21:02:13 -0400
Till Crueger wrote:
Hi,
I hope this is the best newsgroup for this topic. I looked around, but I
couldn't find any more specific newsgroups.
I am working on some network code right now. For help I am using "Beej's
Guide to Network Programming". Now I stumbled upon the chapter about data
encapsulation. I get the point that you should send across the Network
some information about how much data you have been sending, so you can
reconstruct the packets correctely. So far I think I got everything.
However then he says that you need to make your buffer twice as large as a
single packet, because you might actually read past the packet you are
trying to handle at the moment. Since you can tell recv() how much you
want to recieve couldn't you just make sure this wont ever happen? I would
have tried something like this:
read size information
check if everything was recieved
read the rest (let recv() know how much to read)
Or is there some problem to this, so you actually need to use bigger
buffers or circular buffers?
Thanks for your help,
Till
It can be done the way you outline. Efficiency will be improved if you do only one recv() call, and if you fetch lots of data in the one call. Then you can analyze the size info and determine if you have a complete message. There's nothing magic about having "twice" as large a buffer, but bigger is better if you care about performance.
A circular buffer is awkward because recv() needs a continuous array. So using a large buffer will also reduce the need to copy data down when you get near the end of the buffer. I often use a buffer 10X the largest packet to get this efficiency.
--
Scott McPhillips [VC++ MVP]
.
- References:
- Network buffering question
- From: Till Crueger
- Network buffering question
- Prev by Date: Re: Code Comprehension
- Next by Date: Re: Network buffering question
- Previous by thread: Network buffering question
- Next by thread: Re: Network buffering question
- Index(es):
Relevant Pages
|