# Winsock

Winsock (WINdows SOCKet) est une bibliothèque logicielle pour Windows dont le but est d'implémenter une interface de programmation inspirée de Berkeley sockets. Elle prend notamment en charge l'envoi et la réception des paquets de données sur des réseaux TCP/IP.
Les applications qui utilisent Winsock sont nombreuses : navigateurs, gestionnaire de courrier électronique, Apache, etc.

## Historique

Dans les anciennes versions de système d'exploitation de Microsoft (i.e. MS-DOS avec l'interface graphique Windows 3.x), il n'y avait que des fonctionnalités réseau limitées, basées sur NetBIOS (une technologie provenant à l'origine d'IBM). En particulier, Microsoft ignora complètement la pile de protocoles TCP/IP. Des universités et des sociétés commerciales ont créé des produits TCP/IP pour MS/DOS, ces organismes sont notamment MIT, FTP Software, Sun Microsystems, Ungermann-Bass et Excelan.
Le problème était que chaque implémentation de TCP/IP hors Microsoft avait sa propre API. L'US Air Force a développé RFC 1001/1002, une implémentation NetBIOS sur la couche transport TCP/UDP. La société FTP Software avait de son côté fait elle aussi une tentative de standardisation dans ce domaine.
Winsock a été proposée par Martin Hall de la société JSB Software (devenue par la suite Stardust Technologies) en octobre 1991. La première édition de cette spécification a été écrite par Martin Hall, Mark Towfiq de la société Microdyne (devenue par la suite Sun Microsystems), Geoff Arnold de Sun Microsystems, et Henry Sanders de Microsoft.

## Technologie

La spécification initiale de Winsock définit deux interfaces : l'API et le SPI (Service Provider Interface).
Winsock est basé sur les sockets BSD, mais fournit des fonctions additionnelles pour être conforme au modèle de programmation Windows, par exemple la fonction WSAGetLastError.

## Spécifications

* Version 1.0 (juin 1992)
* Version 1.1 (janvier 1993)
    contient quelques corrections et rend plus clair certains passages. Le changement le plus important était l'implémentation de la fonction gethostname.
* Winsock 2 était une extension de Winsock 1.1. Il ajoutait entre autres
** le support de la résolution de noms indépendant du protocole,
** multicasting
** qualité de service.
    Il définissait aussi les spécifications pour différents protocoles : IPX/SPX de Novell Netware et DECNet. Cette nouvelle spécification permet à un socket d'être partagé entre plusieurs process. Elle permet aussi de créer des groupes de sockets.
* Versions 2.0.x (mai 1994)
* Version 2.1.0 (janvier 1996)
* Version 2.2.0 (mai 1996)
* Version 2.2.1 (mai 1997) and Version 2.2.2 (août 1997)
* En décembre 2000, dans Windows 2000, IPv6 était la première implémentation de RFC 2553 (de mars 1999, remplacé ensuite par RFC 3493), une API indépendante du protocole pour la résolution de noms, qui deviendra une partie de Winsock dans Windows XP.

## Implémentations
### Implémentations de Microsoft

* Microsoft n'a pas implémenté Winsock 1.0.
* La Version 1.1 de Winsock était fourni comme un produit additionnel sous le nom de Wolverine pour Windows for Workgroups. Dans les versions suivantes, il était inclus dans Windows 95 and Windows NT 3.x.
* Version 2 de Winsock était fournie comme un produit additionnel de Windows 95. Il était inclus dans Windows 98, Windows NT 4.0, et les versions suivantes de Windows.
* Les versions récentes de Winsock 2.x ont été fournies avec de nouvelles versions de Windows ou font partie des packs de service.

### Autres implémentations

* Par ordre alphabétique : 3Com, Beame & Whiteside, DEC, Distinct, FTP Software, Frontier, IBM, Novell, Microdyne, NetManage, Sun Microsystems et Trumpet Software International
** Trumpet Winsock pouvait même être installé sur le très ancien Windows 3.0

## Source

Originellement adapté de : Aboba, Bernard D., comp.protocols.tcp-ip.ibmpc, FAQ, 1993. Usenet: news:news.answers. Merci pour http://www.foldoc.org.

## Références externes
### Microsoft

* The Windows Sockets API
* Porting Berkley Socket programs to Winsock
* WSK : WinSock Kernel
* Windows Network Development blog

### Autres

* Winsock-API lien cassé.
* Pour les améliorations de Winsock sur Vista, voir (fr)
* Réinitialiser Winsock (Windows XP SP2)
* WinSock Development Information
* Winsock Programmer's FAQ