title: Raw ICMP socket interaction with internal stack windows/linux
body: <p>In regard to using ICMP raw socket like in this example</p>
  
  <pre><code>sd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
  </code></pre>
  
  <p>There's some important question I didn't find an answer anywhere in the documentation. As far as I understand the ICMP protocol is implemented 
  on kernel level ((by %SystemRoot%\System32\Drivers\Tcpip.sys driver windows) . </p>
  
  <p><strong><em>So how this kernel logic interacts with the raw user space socket willing to send and receive the ICMP packets defined as in example above?</em></strong> </p>
  
  <p>Is ICMP logic canceled since RAW socket is open and OS gives the application full control of ICMP? Or they are working in parallel (inevitably creating the mess on the network). Can I tell OS which ICMP packets I would like to handle exactly?</p>
  
  <p>Answers for both linux and windows are welcome.</p>