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 für UNIX an eine der standardmäßigen Datei-E/A-Funktionen (z. B. Lesen und Schreiben) übergeben werden.
Darüber hinaus sind alle Handles in UNIX, einschließlich Sockethandles, kleine, nicht negative ganze Zahlen, und einige Anwendungen nehmen an, dass dies zutrifft.
Windows Sockethandles haben keine Einschränkungen, mit dem Anderen, dass der Wert INVALID _ SOCKET kein gültiger Socket ist. Sockethandles können einen beliebigen Wert im Bereich von 0 bis INVALID _ SOCKET-1 übernehmen.
Da der SOCKET-Typ nicht signiert ist, kann das Kompilieren von vorhandenem Quellcode beispielsweise aus einer UNIX-Umgebung zu Compilerwarnungen bei Nichtübereinstimmungen zwischen signierten und nicht signierten Datentypen führen.
Dies bedeutet beispielsweise, dass die Überprüfung auf Fehler, wenn die Socket- und Accept-Funktionen zurückgeben, nicht durchgeführt werden sollte, indem der Rückgabewert mit –1 verglichen wird oder ob der Wert negativ ist (sowohl gängige als auch rechtliche Ansätze in UNIX). Stattdessen sollte eine Anwendung die Manifestkonst constant INVALID _ SOCKET verwenden, wie in der Winsock2.h-Headerdatei definiert. Beispiel:
Typischer BSD UNIX Stil
s = socket(...);
if (s == -1) /* or s < 0 */
{/*...*/}
Bevorzugter Stil
s = socket(...);
if (s == INVALID_SOCKET)
{/*...*/}