Freigeben über


Socketdatentyp

In Winsock-Anwendungen ist ein Socketdeskriptor kein Dateideskriptor und muss mit den Winsock-Funktionen verwendet werden.

In UNIX wird ein Socketdeskriptor durch einen Standarddateideskriptor dargestellt. Daher kann ein Socketdeskriptor unter UNIX an jede der Standard-Datei-E/A-Funktionen (z. B. Lese- und Schreibzugriff) übergeben werden.

Darüber hinaus sind alle Handles in UNIX, einschließlich Sockethandles, kleine, nicht negative ganze Zahlen, und einige Anwendungen gehen davon aus, dass dies wahr ist.

Windows Sockets-Handles haben keine Einschränkungen, außer dass der Wert INVALID_SOCKET kein gültiger Socket ist. Sockethandles können einen beliebigen Wert im Bereich von 0 bis INVALID_SOCKET bis 1 annehmen.

Da der SOCKET-Typ ohne Vorzeichen ist, kann das Kompilieren von vorhandenem Quellcode aus z. B. aus einer UNIX-Umgebung zu Compilerwarnungen zu nicht signierten/nicht signierten Datentypen führen.

Dies bedeutet z. B., dass die Überprüfung auf Fehler beim Zurückgeben von Socket - und Annahmefunktionen nicht durchgeführt werden sollte, indem der Rückgabewert mit -1 verglichen wird oder ob der Wert negativ ist (sowohl allgemeine als auch rechtliche Ansätze in UNIX). Stattdessen sollte eine Anwendung die Manifestkonstante INVALID_SOCKET verwenden, die in der Winsock2.h-Headerdatei definiert ist. Beispiel:

Typischer BSD-UNIX-Stil

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

Bevorzugte Formatvorlage

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

Portieren von Socketanwendungen zu Winsock

Überlegungen zur Winsock-Programmierung