Well I won't go into it too much simply because raw sockets, although they have many valid uses, are also a very good way to create attacks in the TCP protocol, such as spoofing. If I recall, Win9x doesn't even support "true" raw sockets (but I might be mistaken) but I know for a fact that NT/2k/XP only allows it for admins (XP might allow it for power users as well). The reason again is raw sockets can be dangerous in the wrong hands. Basically instead of creating a socket for TCP or UDP you create it for RAW. RAW allows you to create a socket that either uses a known protocol such as ICMP, or a protocol that WIndows has no information about. Pretty much, instead of using SOCK_STREAM(TCP) or SOCK_DGRAM(UDP), you use SOCK_RAW. If you are interested in the more technical aspects of it, I'd recommend "Network Programming for Microsoft Windows Second Edition" (ISBN: 0-7356-1579-9) it's a great book for learning everything you could ever want to know about socket programming on Windows.