Tipo di dati Socket
Nelle applicazioni Winsock un descrittore socket non è un descrittore di file e deve essere usato con le funzioni Winsock.
In UNIX un descrittore socket è rappresentato da un descrittore di file standard. Di conseguenza, un descrittore socket in UNIX può essere passato a qualsiasi funzione di I/O di file standard (ad esempio lettura e scrittura).
Inoltre, tutti gli handle in UNIX, inclusi gli handle socket, sono numeri interi piccoli, non negativi e alcune applicazioni fanno ipotesi che questo sarà vero.
Gli handle di Windows Socket non hanno restrizioni, ad eccezione del fatto che il valore INVALID_SOCKET non è un socket valido. Gli handle socket possono richiedere qualsiasi valore compreso nell'intervallo da 0 a INVALID_SOCKET-1.
Poiché il tipo di SOCKET non è firmato, la compilazione di codice sorgente esistente da, ad esempio, un ambiente UNIX può causare avvisi del compilatore relativi a tipi di dati firmati/non firmati non corrispondenti.
Ciò significa, ad esempio, che il controllo degli errori quando il socket e accettare funzioni restituite non deve essere eseguito confrontando il valore restituito con -1 o verificando se il valore è negativo (approcci comuni e legali in UNIX). Al contrario, un'applicazione deve usare la costante manifesto INVALID_SOCKET come definito nel file di intestazione Winsock2.h. Per esempio:
Stile UNIX BSD tipico
s = socket(...);
if (s == -1) /* or s < 0 */
{/*...*/}
Stile preferito
s = socket(...);
if (s == INVALID_SOCKET)
{/*...*/}
Argomenti correlati