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)
{/*...*/}
Zugehörige Themen