Ordinamento dei byte
È necessario tenere sempre conto di eventuali differenze tra l'ordinamento dei byte utilizzato per l'archiviazione di interi dall'architettura host e l'ordinamento dei byte utilizzato in transito da singoli protocolli di trasporto. Qualsiasi riferimento a un indirizzo o a un numero di porta trasmesso a o da una routine di Windows Sockets deve essere nell'ordine di rete (big-endian) secondo il protocollo utilizzato. Nel caso dell'indirizzo IP, questo include i parametri di porta e indirizzo IP di una struttura sockaddr (ma non il parametro sin_family).
Numerosi 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 non è consigliabile 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 convertire i numeri interi 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 per consentire all'utente di specificare una porta alternativa. Il numero di porta restituito da getservbyname è già in ordine di rete, ovvero il formato necessario per costruire un indirizzo in modo che non sia necessaria alcuna traduzione. 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 l'htons o WSAHtons funzione) prima di usarlo per costruire un indirizzo. Viceversa, se l'applicazione dovesse visualizzare il numero della porta all'interno di un indirizzo (restituito da getpeername ad esempio), il numero di porta deve essere convertito dalla rete all'ordine dell'host (usando il ntohs o funzione 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 i quali 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