Winsock
Windows Socket API 仕様は2つのインタフェースを定義している。1つはアプリケーションソフトウェア開発者が利用するAPIであり、もう1つはネットワークソフトウェア開発者が新たなプロトコルモジュールをシステムに追加する際に利用するSPIである。API は準拠アプリケーションが Winsock に準拠して実装された任意のプロトコルを使って動作可能であることを保証する。SPI は準拠プロトコルモジュールを Windows に追加可能であることと、任意のAPI準拠アプリケーションから利用可能となることを保証する。リリース当初、複数プロトコルサポートが必須だったため、このような保証は重要だったが、今では学問的興味から語られるだけである。Windows Socket version 2.0 には IPX/SPX で使われる機能も含まれているが、Winsock 2.0 リリース当時から既に廃れつつあるプロトコルであり、今ではこれを使うものはほとんどないだろう。マイクロソフトは最近の Windows には必ず高品質なTCP/IPスタックを実装しており、その代替となる有力な製品も存在しない。さらに言えば、TCP/IP 以外のプロトコルを実装しなければならない強い動機も存在しない。
Windows Sockets はバークレーのソケットに基づいているが、Windows の標準プログラミングモデルに対応するために機能を追加している。
内部ドラフト。標準として公開されたものではない。
Winsock はソケットのほとんどの機能をカバーしているが、Windows と UNIX の根本的な違いからどうしても避けられない差異も生じている(とは言っても、STREAMSとの差異に比べれば、ずっとソケットに近い)。APIに含まれる全ての関数名の頭にはWSAが付く。例えばホスト名参照の WSAGetHostByName() などである。BSDソケットからの拡張で特筆すべきは、「非同期ソケット」およびオーバーラップI/Oを利用した「オーバーラップソケット」である。非同期バージョンの関数は、接頭辞として WSAAsync を付け、WSAAsyncGetHostByName() などという名前になっており、Windowsのウィンドウメッセージによって結果を通知する。非同期処理のキャンセルはWSACancelAsyncRequest()で実行する。オーバーラップソケットは完了通知にWSAEVENTオブジェクトとWSAOVERLAPPED構造体を使用する。なお、Winsockの非同期ソケットやオーバーラップソケットは、BSDのノンブロッキングソケットとは異なる概念である。ブロッキングモードのsend()およびrecv()のタイムアウト時間を設定するソケットオプションSO_SNDTIMEOおよびSO_RCVTIMEOを使用するには、ソケット作成時にWSA_FLAG_OVERLAPPED属性が設定されている必要がある。