Bytereihenfolge
Es muss immer darauf achten, unterschiede zwischen der Byte reihenfolge, die zum Speichern von ganzen Zahlen durch die Hostarchitektur verwendet wird, und der byte-Reihenfolge zu berücksichtigen, die von einzelnen Transportprotokollen im Netzwerk verwendet wird. Jeder Verweis auf eine Adresse oder Portnummer, die an oder von einer Windows Sockets-Routine übergeben wird, muss in der Netzwerk reihenfolge (Big-Endian) für das verwendete Protokoll sein. Im Fall einer IP-Adresse umfasst dies die IP-Adresse und die Portparameter einer Sockaddr-Struktur (aber nicht den Parameter sin _ family).
Eine Reihe von UNIX-Systemen arbeiten mit CPUs, die ganze Zahlen in der Netzwerk-Byte-Reihenfolge (Big-Endian) darstellen. Daher kann die Notwendigkeit, ganze Zahlen von der Host-Byte-Reihenfolge in die Netzwerk-Byte reihenfolge zu konvertieren, ignoriert werden, ohne Probleme zu verursachen, auch wenn dies aus Portabilitäts-Grund nicht empfohlen wird.
Im Gegensatz dazu ist die Byte reihenfolge, die für die Darstellung von ganzen Zahlen durch die meisten Intel® CPUs verwendet wird, little-endian. Daher ist es zwingend erforderlich, ganze Zahlen von der Byte reihenfolge des Hosts in die Netzwerk-Byte-Reihenfolge zu konvertieren, bevor sie in Winsock Sockets-Funktionen und -Strukturen verwendet werden.
Stellen Sie sich eine Anwendung vor, die normalerweise einen Server über den TCP-Port kontaktiert, der dem Zeitdienst entspricht, aber einen Mechanismus für den Benutzer bietet, um einen alternativen Port anzugeben. Die von getservbyname zurückgegebene Portnummer befindet sich bereits in der Netzwerk reihenfolge. Dies ist das Format, das zum Erstellen einer Adresse erforderlich ist, sodass keine Übersetzung erforderlich ist. Wenn der Benutzer jedoch einen anderen Port verwendet, der als ganze Zahl eingegeben wird, muss die Anwendung dies vom Host in die TCP/IP-Netzwerk reihenfolge konvertieren (mithilfe der htons- oder WSAHtons-Funktion), bevor es zum Erstellen einer Adresse verwendet wird. Wenn die Anwendung hingegen die Nummer des Ports innerhalb einer Adresse anzeigen würde (z. B. von getpeername zurückgegeben), muss die Portnummer von der Netzwerk- in die Host reihenfolge konvertiert werden (mithilfe der ntohs- oder WSANtohs-Funktion), bevor sie angezeigt werden kann.
Da sich die Bytebestellungen von Intel und internet unterscheiden, sind die oben beschriebenen Konvertierungen unvermeidbar. Anwendungsautoren werden darauf gewarnunget, dass sie die im Rahmen von Winsock bereitgestellten Standardkonvertierungsfunktionen verwenden sollten, anstatt ihren eigenen Konvertierungscode zu schreiben, da zukünftige Implementierungen von Winsock wahrscheinlich auf Systemen ausgeführt werden, deren Host reihenfolge mit der Netzwerk-Byte reihenfolge identisch ist. Nur Anwendungen, die die Standardkonvertierungsfunktionen zwischen Host- und Netzwerk-Byte reihenfolge verwenden, sind wahrscheinlich portabel.