Is a struct’s address the same as its first member’s address?

Is a struct’s address the same as its first member’s address?

Yes, this is actually mandated by the C and C++ standards. From the C standard:

6.7.2.1-13. A pointer to a structure object, suitably converted, points to its initial member

The size of your struct should be two bytes. You should not convert a pointer to it to char*, though: instead, you should use memcpy to copy your Bitmask into the buffer that you send over the network.

EDIT Since you use scatter-gather I/O with iovec, you do not need to cast Bitmask to anything: iov_base is void*, so you can simply set iov[0].iov_base = header;

Note: This works only as long as your struct does not contain virtual functions, base classes, etc. (thanks, Timo).

EDIT2

In order to get {0x81, 0x05} in your struct, you should change the order of structure elements as follows:

struct Bitmask {
    unsigned char opcode: 4; 
    unsigned char rsv3: 1; 
    unsigned char rsv2: 1; 
    unsigned char rsv1: 1; 
    unsigned char fin: 1; 
    unsigned char payload_length: 7; 
    unsigned char mask: 1;
}

Leave a Comment