Partager via


Type de données socket

Dans les applications Winsock, un descripteur de socket n’est pas un descripteur de fichier et doit être utilisé avec les fonctions Winsock.

Dans UNIX, un descripteur de socket est représenté par un descripteur de fichier standard. Par conséquent, un descripteur de socket sur UNIX peut être passé à l’une des fonctions d’E/S de fichier standard (lecture et écriture, par exemple).

En outre, tous les handles dans UNIX, y compris les handles de socket, sont de petits entiers non négatifs, et certaines applications supposent que cela sera vrai.

Les handles de sockets Windows n’ont aucune restriction, sinon que la valeur INVALID_SOCKET n’est pas un socket valide. Les handles de socket peuvent prendre n’importe quelle valeur comprise entre 0 et INVALID_SOCKET-1.

Étant donné que le type SOCKET n’est pas signé, la compilation du code source existant à partir, par exemple, d’un environnement UNIX peut entraîner des avertissements du compilateur concernant les incompatibilités de types de données signés/non signés.

Cela signifie, par exemple, que la vérification des erreurs lors du retour des fonctions socket et d’acceptation ne doit pas être effectuée en comparant la valeur de retour à –1, ou en vérifiant si la valeur est négative (approches courantes et juridiques dans UNIX). Au lieu de cela, une application doit utiliser la constante manifeste INVALID_SOCKET comme défini dans le fichier d’en-tête Winsock2.h . Par exemple :

Style UNIX BSD classique

s = socket(...);
if (s == -1)    /* or s < 0 */
    {/*...*/}

Style préféré

s = socket(...);
if (s == INVALID_SOCKET)
    {/*...*/}

Portage d’applications socket vers Winsock

Considérations relatives à la programmation Winsock