ret = recv(s, pkt, RCVPKTSIZE, MSG_TRUNC);
if (ret < sizeof(*eth)+sizeof(*ip)) {
- return -1;
+ return EMSGSIZE;
}
ZERO_STRUCTP(src);
/* We only want IPv4 packets */
if (ip->version != 4) {
- return -1;
+ return ENOMSG;
}
/* Dont look at fragments */
if ((ntohs(ip->frag_off)&0x1fff) != 0) {
- return -1;
+ return ENOMSG;
}
/* we only want TCP */
if (ip->protocol != IPPROTO_TCP) {
- return -1;
+ return ENOMSG;
}
/* make sure its not a short packet */
if (offsetof(struct tcphdr, th_ack) + 4 +
(ip->ihl*4) + sizeof(*eth) > ret) {
- return -1;
+ return EMSGSIZE;
}
/* TCP */
tcp = (struct tcphdr *)((ip->ihl*4) + (char *)ip);
/* we only want TCP */
if (ip6->ip6_nxt != IPPROTO_TCP) {
- return -1;
+ return ENOMSG;
}
/* TCP */
return 0;
}
- return -1;
+ return ENOMSG;
}
#else /* HAVE_AF_PACKET */
buffer=pcap_next(pt, &pkthdr);
if (buffer==NULL) {
- return -1;
+ return ENOMSG;
}
ZERO_STRUCTP(src);
/* We only want IPv4 packets */
if (ip->ip_v != 4) {
- return -1;
+ return ENOMSG;
}
/* Dont look at fragments */
if ((ntohs(ip->ip_off)&0x1fff) != 0) {
- return -1;
+ return ENOMSG;
}
/* we only want TCP */
if (ip->ip_p != IPPROTO_TCP) {
- return -1;
+ return ENOMSG;
}
/* make sure its not a short packet */
if (offsetof(struct tcphdr, th_ack) + 4 +
(ip->ip_hl*4) + sizeof(*eth) > pkthdr.caplen) {
- return -1;
+ return EMSGSIZE;
}
/* TCP */
tcp = (struct tcphdr *)((ip->ip_hl*4) + (char *)ip);
/* we only want TCP */
if (ip6->ip6_nxt != IPPROTO_TCP) {
- return -1;
+ return ENOMSG;
}
/* TCP */
return 0;
}
- return -1;
+ return ENOMSG;
}
#endif /* HAVE_AF_PACKET */