Condividi tramite


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

conversione di applicazioni socket in Winsock

considerazioni sulla programmazione Winsock