noto ora... se ci sono option è assolutamente sbagliato considerare sizeof(struct tcphdr) come dimensione dell'header tcp. Vedo che tu usi quel valore per calcolarti al dimensione dei dati:
quella non è la dim dei dati ma dei dati+option (se presenti)codice:int dim_data = sizeof(ipq_packet_msg_t)-sizeof(struct tcphdr)-sizeof(struct iphdr);
sizeof(struct tcphdr) è la parte fissa degli header, cioè 20 bytes.
Conclusione: per non includere le option devi sostituire quel valore con (4*tcp->doff)