ordine dei byte
È necessario tenere sempre conto delle differenze tra l'ordinamento dei byte usato per l'archiviazione di numeri interi dall'architettura host e l'ordinamento dei byte utilizzato sul filo da singoli protocolli di trasporto. Qualsiasi riferimento a un indirizzo o a un numero di porta passato a o da una routine Di Windows Sockets deve trovarsi nell'ordine di rete (big-endian) per il protocollo utilizzato. Nel caso di IP, sono inclusi l'indirizzo IP e i parametri di porta di una struttura sockaddr (ma non il parametro sin_family ).
Diversi sistemi UNIX operano su CPU che rappresentano numeri interi nell'ordine dei byte di rete (big-endian). Pertanto, la necessità di convertire numeri interi dall'ordine dei byte host all'ordine dei byte di rete può essere ignorata senza causare problemi anche se questa operazione non è consigliata per la portabilità.
Al contrario, l'ordinamento dei byte usato per rappresentare numeri interi dalla maggior parte delle CPU Intel® è little-endian. Diventa quindi obbligatorio che i numeri interi vengano convertiti dall'ordine dei byte host all'ordine dei byte di rete prima di essere usati nelle funzioni e nelle strutture Winsock Sockets.
Si consideri un'applicazione che normalmente contatta un server sulla porta TCP corrispondente al servizio ora, ma fornisce un meccanismo che consente all'utente di specificare una porta alternativa. Il numero di porta restituito da getservbyname è già nell'ordine di rete, ovvero il formato necessario per costruire un indirizzo in modo che non sia necessaria alcuna conversione. Tuttavia, se l'utente sceglie di usare una porta diversa, immessa come numero intero, l'applicazione deve convertirla dall'host all'ordine di rete TCP/IP (usando la funzione htons o WSAHtons ) prima di usarla per costruire un indirizzo. Al contrario, se l'applicazione deve visualizzare il numero della porta all'interno di un indirizzo (restituito da getpeername , ad esempio), il numero di porta deve essere convertito da rete a ordine host (usando la funzione ntohs o WSANtohs ) prima che possa essere visualizzato.
Poiché gli ordini di byte Intel e Internet sono diversi, le conversioni descritte in precedenza sono inevitabili. Gli autori di applicazioni devono usare le funzioni di conversione standard fornite come parte di Winsock anziché scrivere il proprio codice di conversione, poiché è probabile che le implementazioni future di Winsock vengano eseguite nei sistemi per cui l'ordine host è identico all'ordine dei byte di rete. È probabile che solo le applicazioni che usano le funzioni di conversione standard tra l'ordine dei byte host e di rete siano portabili.
Argomenti correlati