On 2012-10-08 23:24:42 +0000, James Cameron said:

> 48 bytes is wrong.  32 bytes is right.  Your compiler might be
> aligning the structure members for performance.  Give a suitable
> alignment directive to your compiler.  We use __attribute__((packed))
> in the server code.  Check the offset to each member using whatever
> language facilities are available.  In C we can use sizeof() and
> offsetof().

So here's the debug using Jame's excellent advise.

typedef struct _youServerPacket
{
    char    type;				 /* SP_YOU */
    char    pnum;				 /* Guy needs to know this... */
    char    hostile;
    char    swar;
    char    armies;
    char    tractor;
    char    pad2;
    char    pad3;
    unsigned flags;
    long    damage;
    long    shield;
    long    fuel;
    unsigned short etemp;
    unsigned short wtemp;
    unsigned short whydead;
    unsigned short whodead;
} __attribute__ ((packed)) youServerPacketStruct;

    size = sizeof(youServerPacketStruct);
    NSLog(@"ServerPacketYou size=%d", size);
    NSLog(@"type %lu:%ld\n", offsetof(youServerPacketStruct, type), 
sizeof(char));
    NSLog(@"pnum %lu:%ld\n", offsetof(youServerPacketStruct, pnum), 
sizeof(char));
    NSLog(@"hostile %lu:%ld\n", offsetof(youServerPacketStruct, 
hostile), sizeof(char));
    NSLog(@"swar %lu:%ld\n", offsetof(youServerPacketStruct, swar), 
sizeof(char));
    NSLog(@"armies %lu:%ld\n", offsetof(youServerPacketStruct, armies), 
sizeof(char));
    NSLog(@"tractor %lu:%ld\n", offsetof(youServerPacketStruct, 
tractor), sizeof(char));
    NSLog(@"pad2 %lu:%ld\n", offsetof(youServerPacketStruct, pad2), 
sizeof(char));
    NSLog(@"pad3 %lu:%ld\n", offsetof(youServerPacketStruct, pad3), 
sizeof(char));
    NSLog(@"flags %lu:%ld\n", offsetof(youServerPacketStruct, flags), 
sizeof(unsigned));
    NSLog(@"damge %lu:%ld\n", offsetof(youServerPacketStruct, damage), 
sizeof(long));
    NSLog(@"shield %lu:%ld\n", offsetof(youServerPacketStruct, shield), 
sizeof(long));
    NSLog(@"fuel %lu:%ld\n", offsetof(youServerPacketStruct, fuel), 
sizeof(long));
    NSLog(@"etemp %lu:%ld\n", offsetof(youServerPacketStruct, etemp) , 
sizeof(unsigned short));
    NSLog(@"wtemp %lu:%ld\n", offsetof(youServerPacketStruct, wtemp), 
sizeof(unsigned short));
    NSLog(@"whydead %lu:%ld\n", offsetof(youServerPacketStruct, 
whydead), sizeof(unsigned short));
    NSLog(@"whodead %lu:%ld\n", offsetof(youServerPacketStruct, 
whodead), sizeof(unsigned short));

2012-10-08 22:48:06.564 Packet[10189:303] ServerPacketYou size=44
2012-10-08 22:45:42.254 Packet[10152:303] type 0:1
2012-10-08 22:45:42.255 Packet[10152:303] pnum 1:1
2012-10-08 22:45:42.255 Packet[10152:303] hostile 2:1
2012-10-08 22:45:42.255 Packet[10152:303] swar 3:1
2012-10-08 22:45:42.256 Packet[10152:303] armies 4:1
2012-10-08 22:45:42.256 Packet[10152:303] tractor 5:1
2012-10-08 22:45:42.256 Packet[10152:303] pad2 6:1
2012-10-08 22:45:42.256 Packet[10152:303] pad3 7:1
2012-10-08 22:45:42.256 Packet[10152:303] flags 8:4
2012-10-08 22:45:42.257 Packet[10152:303] damge 12:8
2012-10-08 22:45:42.257 Packet[10152:303] shield 20:8
2012-10-08 22:45:42.257 Packet[10152:303] fuel 28:8
2012-10-08 22:45:42.257 Packet[10152:303] etemp 36:2
2012-10-08 22:45:42.257 Packet[10152:303] wtemp 38:2
2012-10-08 22:45:42.258 Packet[10152:303] whydead 40:2
2012-10-08 22:45:42.258 Packet[10152:303] whodead 42:2

NOTE that sizeof(long) = 8, so I wiped up this program. 

Compiling with -m32 I get sizeof(long) = 4

#include <stdio.h>

main()
{
    printf("char %ld\n", sizeof(char));
    printf("unsigned %ld\n", sizeof(unsigned));
    printf("long %ld\n", sizeof(long));
    printf("unsigned short %ld\n", sizeof(unsigned short));
}

$ gcc size.c ; ./a.out
char 1
unsigned 4
long 8
unsigned short 2

$ gcc -m32 size.c ; ./a.out
char 1
unsigned 4
long 4
unsigned short 2

Recommendations (sorry tired and lazy, so throwing it to the mailing 
list for answers)?

Guess I can look up the -std=c99 stuff?
-- 
Bob Tanner <basic at us.netrek.org>          
Key fingerprint = 9906 320A 8BB6 64AD 96A7  7785 CBFB 10BF 568B F98C
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.us.netrek.org/pipermail/netrek-dev/attachments/20121008/c470ebd6/attachment.html>