Winsock
Winsock2では、ソケットは既定でブロッキングモードで作成される。またBSD互換のsocket()関数を使用して作成されたソケットは、既定でWSA_FLAG_OVERLAPPED属性を持つ。
設計目標は、UNIXから Windows へのソケットベースのアプリケーションの移植を容易にすることであった。新たに Windows 向けに書かれるプログラムにとって、そのAPIが十分かどうかはあまり考慮されなかった。このため、Winsock には移植のために設計された要素がいくつか含まれている。例えば、UNIXアプリケーションでは、ネットワークのエラーも標準Cライブラリの関数内のエラーも同じ errno で表される。これは Windows にはない機能であるため、Winsock はそのための関数 WSAGetLastError() でエラー情報が得られるようにした。このような機能は役立つものの、アプリケーションの移植はなかなか困難だった。多くのTCP/IPアプリケーションは、仮想端末とかforkシステムコールといったUNIXのシステム固有機能を使って実装されており、そのような機能を Windows で再現するのが困難だったのである。しかし、間もなく移植よりも Windows 独自のアプリケーション開発の方が主流となっていった。
初期のマイクロソフトのオペレーティングシステム(MS-DOSもWindowsも)は、ネットワーク機能が貧弱で、NetBIOS/NetBEUIを主に使っていた。これは階層化されていない、ルーティング不可能なネットワーク機能であり、IBM の NetBIOS をマイクロソフトが実装したものであった。特に当時、マイクロソフトはTCP/IPを完全に無視していた。数々の大学グループ(MIT)や商用ベンダー(サン・マイクロシステムズ他)がMS-DOS用TCP/IPを開発し、ハードウェアに同梱するなどして販売していた。Windows がリリースされると、さらに Windows 向け TCP/IP を提供するベンダーが増えていった。しかし、マイクロソフトは相変わらず機能の貧弱な製品を提供していた。
これらベンダーの製品の弱点は、それぞれ独自のAPIを採用していた点である。また、メモリ使用量(当時、640KBもあれば大容量とされていた)や、複数のプロトコルを並行してサポートする方法がない点も問題だった。特に最後の問題点は重要であった。当時のネットワーク環境はベンダー毎に異なり(例えば、DECのDECnet、ノベルのNetware、Banyan Vines、IBM Lan Manager など)、それぞれ違ったプロトコルを使っていた(例えば、ノベルは IPX/SPX、IBM は NetBIOS API ベースのプロトコル、マイクロソフトは NetBEUI Frames Protocol)。
従って、例えば Crynwr の Russ Nelson が開発した QVT や WinQVT はDECのVT220端末エミュレータだが、どちらもアプリケーション内にTCP/IPスタックを持っていた。packet driver と同時に使うことが可能で、例えばノベルのIPX/SPXでNetWareのファイルサーバにアクセスすると同時に、DECのVMSにTCP/IP経由でアクセスすることが可能であった。明らかにこのような環境がこのプロジェクトの目指したものであり、例えばパリのOECDなどでそのような使われ方をしていた。
Windows Sockets API を提案したのは JSB Software の Martin Hall であり、1991年10月、CompuServeでの電子掲示板での議論が最初であった。仕様の第1版を編集したのは Martin Hall、Mark Towfiq(Microdyne、後にサン・マイクロシステムズ)、Geoff Arnold(サン・マイクロシステムズ)、Henry Sanders と J Allard(マイクロソフト)らである。著作権や知的所有権について議論があり、IETF を通すとか非営利団体を結成するといった議論がなされた。結局、単純に著作権は5人がそれぞれ所有することとなった。後に J Allard はマイクロソフト社内に大きなオフィスを与えられ、そこで ACK と NACK と名づけたイグアナを飼った。
細かな機能強化。ネットワーク構成やシステム構成の変化に関して問い合わせたり、通知を受け付ける機構を追加した。
IPv6対応はWindows 2000(2000年12月)で、RFC 2553 (後に RFC 3493 に置換)に基づいて行われ、Windows XPの Winsock の一部となっている。