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 una qualsiasi delle funzioni di I/O file standard (ad esempio lettura e scrittura).
Inoltre, tutti gli handle in UNIX, inclusi i handle socket, sono interi piccoli, non negativi e alcune applicazioni fanno presupposti che questo sarà vero.
Gli handle di Windows Socket non hanno restrizioni, diversamente dal fatto che il valore INVALID_SOCKET non è un socket valido. Gli handle socket possono richiedere qualsiasi valore nell'intervallo 0 a INVALID_SOCKET-1.
Poiché il tipo SOCKET non è firmato, la compilazione del codice sorgente esistente da, ad esempio, un ambiente UNIX può causare avvisi del compilatore su tipi di dati firmati/senza segno non corrispondenti.
Ciò significa, ad esempio, che la verifica degli errori quando il socket e accettare le funzioni restituite non deve essere eseguita confrontando il valore restituito con -1 o verificando se il valore è negativo (sia approcci comuni che legali in UNIX). In alternativa, un'applicazione deve usare la costante manifesto INVALID_SOCKET come definito nel file di intestazione Winsock2.h . Ad esempio:
Stile UNIX BSD tipico
s = socket(...);
if (s == -1) /* or s < 0 */
{/*...*/}
Stile preferito
s = socket(...);
if (s == INVALID_SOCKET)
{/*...*/}
Argomenti correlati