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 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)
    {/*...*/}

Portieren von Socketanwendungen zu Winsock

Winsock-Programmierüberlegungen