Anyone know of a way to get one socket to send on one protocol, for instance UDP, and receive on another protocol like ICMP.

If that's not possible then how about a way to use two sockets with different protocol types that share the same localendpoint???