Cos'è un socket?

I socket consentono la comunicazione tra due processi diversi sulla stessa macchina o su macchine diverse. Per essere più precisi, è un modo per parlare con altri computer usando i descrittori di file Unix standard. In Unix, ogni azione di I / O viene eseguita scrivendo o leggendo un descrittore di file. Un descrittore di file è semplicemente un numero intero associato a un file aperto e può essere una connessione di rete, un file di testo, un terminale o qualcos'altro.

Per un programmatore, un socket sembra e si comporta in modo molto simile a un descrittore di file di basso livello. Questo perché comandi come read () e write () funzionano con i socket nello stesso modo in cui funzionano con file e pipe.

I socket furono introdotti per la prima volta in 2.1BSD e successivamente perfezionati nella loro forma attuale con 4.2BSD. La funzione socket è ora disponibile con la maggior parte delle versioni correnti del sistema UNIX.

Dove viene utilizzato il socket?

Un socket Unix viene utilizzato in un framework di applicazioni client-server. Un server è un processo che esegue alcune funzioni su richiesta di un client. La maggior parte dei protocolli a livello di applicazione come FTP, SMTP e POP3 utilizzano i socket per stabilire la connessione tra client e server e quindi per lo scambio di dati.

Tipi di socket

Ci sono quattro tipi di prese disponibili per gli utenti. I primi due sono quelli più comunemente usati e gli ultimi due sono usati raramente.

Si presume che i processi comunichino solo tra socket dello stesso tipo, ma non ci sono restrizioni che impediscano la comunicazione tra socket di tipo diverso.

  • Stream Sockets- La consegna in un ambiente di rete è garantita. Se invii attraverso il socket dello stream tre elementi "A, B, C", arriveranno nello stesso ordine - "A, B, C". Questi socket utilizzano TCP (Transmission Control Protocol) per la trasmissione dei dati. Se la consegna è impossibile, il mittente riceve un indicatore di errore. I record di dati non hanno limiti.

  • Datagram Sockets- La consegna in un ambiente di rete non è garantita. Sono privi di connessione perché non è necessario disporre di una connessione aperta come in Stream Sockets: si crea un pacchetto con le informazioni di destinazione e lo si invia. Usano UDP (User Datagram Protocol).

  • Raw Sockets- Forniscono agli utenti l'accesso ai protocolli di comunicazione sottostanti, che supportano le astrazioni dei socket. Questi socket sono normalmente orientati al datagramma, sebbene le loro caratteristiche esatte dipendono dall'interfaccia fornita dal protocollo. I socket raw non sono destinati all'utente generico; sono stati forniti principalmente a coloro che sono interessati allo sviluppo di nuovi protocolli di comunicazione o per ottenere l'accesso ad alcune delle strutture più criptiche di un protocollo esistente.

  • Sequenced Packet Sockets- Sono simili a un socket di flusso, con l'eccezione che i limiti dei record vengono preservati. Questa interfaccia viene fornita solo come parte dell'astrazione dei socket NS (Network Systems) ed è molto importante nelle applicazioni NS più serie. I socket per pacchetti sequenziati consentono all'utente di manipolare le intestazioni SPP (Sequence Packet Protocol) o IDP (Internet Datagram Protocol) su un pacchetto o un gruppo di pacchetti, scrivendo un'intestazione prototipo insieme ai dati da inviare o specificando un'intestazione predefinita da utilizzare con tutti i dati in uscita e consente all'utente di ricevere le intestazioni sui pacchetti in arrivo.

Cosa c'è dopo?

I prossimi capitoli hanno lo scopo di rafforzare le tue basi e preparare una base prima di poter scrivere programmi Server e Client usando socket . Se vuoi passare direttamente a vedere come scrivere un programma client e server, puoi farlo ma non è raccomandato. Si consiglia vivamente di andare passo dopo passo e completare questi primi capitoli per creare la propria base prima di passare alla programmazione.