Hi all, In Linux 2.4 6 In the function ip_local_deliver_finish() we have the following lines .. if(raw_sk != NULL) raw_sk = raw_v4_input(skb, skb->nh.iph, hash); Now in this raw_v4_input() we call raw_rcv once wherein the skb is pushed to the raw application listening on that socket. then we have some piece of code wherein it hashes into the kernel protocol n decides whether the packet is to be given for kernel stack processing or not. the again we have , if(raw_sk != NULL) raw_rcv(raw_sk, skb); sock_put(raw_sk); } else if (!flag) icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PROT_UNREACH, 0); out: kfree_skb(skb); } Now my question is why do we call raw_rcv twice?????? for eg: if we get an ICMP_DEST_UNREACHABLE or any ICMP error message how will the packet flow???? Thanks, -Lakshmi -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/