[crossfire] SockList buffer size difference in server/client. Bug?
Mark Wedel
mwedel at sonic.net
Thu Sep 30 23:09:32 CDT 2010
On 09/30/10 08:05 PM, Kevin R. Bulgrien wrote:
> server/trunk/include/shared/newclient.h:
>
> /**
> * Maximum size of a packet the client expects to get. Using a buffer of this
> * size allows the client to avoid constant allocation and deallocation of the
> * same buffer over and over again (at the cost of using extra memory). This
> * also makes the code simpler. The size is big enough to receive any valid
> * packet: 2 bytes for length, 65535 for maximum packet size, 1 for appended a
> * trailing null character.
> */
> #define MAXSOCKBUF (2+65535+1)
>
> . . .
>
> /**
> * Contains the base information we use to make up a packet we want to send.
> */
> typedef struct SockList {
> #ifdef CLIENT_TYPES_H /* Used by the client */
> int len;
> unsigned char *buf;
> #else /* Used by the server */
> size_t len;
> unsigned char buf[2+65536UL+1]; /* 2=length, 65536=content, 1=trailing
> NUL */
> #endif
> } SockList;
>
> Is use of 65536 in server vs 65535 in the client a bug?
>
> In client, the buffer is malloc'd in main(). It almost seems that it could
> just as well be statically allocated there too... doesn't seem like there
> is much point in the ifdef here.
Realistically, I believe 65535 + 2 would always be sufficient. If the length
of a packet is greater than that, it can not be held in the 2 byte length parameter.
I'm guessing the extra byte just allows one to always put a null one character
beyond the end of the buffer - I'm not actually sure if that is really done or not.
I'm not sure why the server has it be 65536 - that said, realistically, as
long as it is 65538 (65535 + 2 + 1), it probably doesn't make any difference -
if the server defined it as 100000, it would still work - just extra space is
now being allocated which will never be used.
That extra byte in this case almost certainly doesn't make a difference, as I
suspect in most cases, the data following it is going to get aligned on a 4 byte
boundary, which would bring that to 65540
More information about the crossfire
mailing list