over the socket ? Is there a way to have a dynamic buffer ? What does one do when one does not know how much information is com- ming
Unix Socket FAQ for Network programming
(Continued from previous question...)
over the socket ? Is there a way to have a dynamic buffer ?
What does one do when one does not know how much information is com-
ming
When the size of the incoming data is unknown, you can either make the
size of the buffer as big as the largest possible (or likely) buffer,
or you can re-size the buffer on the fly during your read. When you
malloc() a large buffer, most (if not all) varients of unix will only
allocate address space, but not physical pages of ram. As more and
more of the buffer is used, the kernel allocates physical memory.
This means that malloc'ing a large buffer will not waste resources
unless that memory is used, and so it is perfectly acceptable to ask
for a meg of ram when you expect only a few K.
On the other hand, a more elegant solution that does not depend on the
inner workings of the kernel is to use realloc() to expand the buffer
as required in say 4K chunks (since 4K is the size of a page of ram on
most systems). I may add something like this to sockhelp.c in the
example code one day.
(Continued on next question...)
Other Interview Questions
|