Vedere la definizione di TCP in /netinet/tcp.h:Perché un campo a 8 bit ha endianness?
struct tcphdr
{
u_int16_t th_sport; /* source port */
u_int16_t th_dport; /* destination port */
tcp_seq th_seq; /* sequence number */
tcp_seq th_ack; /* acknowledgement number */
# if __BYTE_ORDER == __LITTLE_ENDIAN
u_int8_t th_x2:4; /* (unused) */
u_int8_t th_off:4; /* data offset */
# endif
# if __BYTE_ORDER == __BIG_ENDIAN
u_int8_t th_off:4; /* data offset */
u_int8_t th_x2:4; /* (unused) */
# endif
u_int8_t th_flags;
# define TH_FIN 0x01
# define TH_SYN 0x02
# define TH_RST 0x04
# define TH_PUSH 0x08
# define TH_ACK 0x10
# define TH_URG 0x20
u_int16_t th_win; /* window */
u_int16_t th_sum; /* checksum */
u_int16_t th_urp; /* urgent pointer */
};
Perché il campo a 8 bit hanno un ordine diverso in endianness? Pensavo che solo i campi a 16 e 32 bit avessero importanza con l'ordine dei byte, e potevi convertire tra endian con ntohs e ntohl, rispettivamente. Quale sarebbe la funzione per la gestione di cose a 8 bit? Se non ce n'è, sembra che un TCP che usa questa intestazione su una piccola macchina endian non funzioni con un TCP su una macchina big endian.
Strano davvero, su quale sistema hai trovato questo file di intestazione? – fbonnet
debian linux. questa versione è inclusa se __USE_BSD è #definito. – Claudiu