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 auf UNIX an eine der Standarddatei-E/A-Funktionen übergeben werden (z. B. Lese- und Schreibzugriff).
Darüber hinaus sind alle Handles in UNIX, einschließlich Sockethandles, kleine, nicht negative ganze Zahlen, und einige Anwendungen machen annahmen, dass dies zutrifft.
Windows Sockets-Handles haben keine Einschränkungen, außer dass der Wert INVALID_SOCKET kein gültiger Socket ist. Socketziehpunkte können einen beliebigen Wert im Bereich 0 bis INVALID_SOCKET-1 annehmen.
Da der SOCKET- Typs nicht signiert ist, kann das Kompilieren vorhandener Quellcode aus einer UNIX-Umgebung beispielsweise zu Compilerwarnungen über signierte/nicht signierte Datentypen führen.
Dies bedeutet z. B., dass die Überprüfung auf Fehler beim Socket und akzeptieren, Funktionen zurückgegeben werden, nicht durch Vergleichen des Rückgabewerts mit -1 oder prüfen, ob der Wert negativ ist (sowohl allgemeine als auch rechtliche Ansätze in UNIX). Stattdessen sollte eine Anwendung die Manifestkonstante INVALID_SOCKET wie in der Winsock2.h Headerdatei definiert verwenden. Zum Beispiel:
Typischer BSD UNIX-Stil
s = socket(...);
if (s == -1) /* or s < 0 */
{/*...*/}
Bevorzugte Formatvorlage
s = socket(...);
if (s == INVALID_SOCKET)
{/*...*/}
Verwandte Themen