When receiving on an ICMP socket, (SOCK_RAW with IPPROTO_ICMP), since there is no concept of "port" in the ICMP protocol, how can an application determine that a received packet is not part of some other TCP/UDP/whatever socket transmission that is also happening at the same time?
For example, suppose you have an application with 2 threads. Thread 1 sets up a TCP server socket, and continuously receives data from a connected client. Thread 2 continuously sends echo request packets (ping) to the same client using an ICMP socket, and then receives echo replys. What is to prevent Thread 2 from receiving one of the TCP packets instead?
ICMP is a different protocol from TCP and UDP, as determined by the protocol field in the IP header. When you open a socket with IPPROTO_ICMP, you're telling the socket to transmit and receive only packets with IP headers whose protocol field is set to ICMP.
Similarly, sockets opened with IPPROTO_TCP or IPPROTO_UDP respond only to packets whose IP headers contain a protocol field that is set to TCP or UDP, respectively.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With