La socket è l'interfaccia standard tra i programmi applicativi e i protocolli TCP/IP. Una socket è come una porta di comunicazione e non è molto diversa da una presa elettrica, infatti letteralmente Socket significa “presa”. Tutto ciò che è in grado di comunicare tramite il protocollo standard TCP/IP, può collegarsi ad una socket e comunicare tramite questa porta di comunicazione, allo stesso modo in cui un qualsiasi apparecchio che funziona a corrente può collegarsi ad una presa elettrica e sfruttare la tensione messa a disposizione. Nel caso delle socket, invece dell’elettricità, nella rete viaggiano pacchetti TCP/IP. Tale protocollo e le socket forniscono quindi un’astrazione, che permette di far comunicare dispositivi diversi che utilizzano lo stesso protocollo. Quindi un client, per comunicare con un host remoto usando il protocollo TCP/IP, dovrà creare per prima cosa un oggetto Socket con tale host. Si dovrà specificare l’indirizzo IP dell’host, e il numero di porta. Sull’host remoto dovrà esserci un server che è in "ascolto" su tale porta. Un server rimane in attesa di connessioni su una certa porta, ed ogni volta che un client si connette a tale porta, il server ottiene una socket, tramite la quale può comunicare col client. L’ origine dei socket risale al 1983, quando furono introdotti nel BSD 4.2 (BSD-Berkeley Software Distribution) nella Università di Berkeley in California. I protocolli utilizzabili per l’implementazione delle Socket sono:
protocollo TCP (Transfer Control Protocol)
protocollo UDP(User Datagram Protocol)
Entrambi questi protocolli si appoggiano sul protocollo IP (Internet Protocol). Le socket possono essere implementate con svariati linguaggi di programmazione, come c, c# e java. Analizziamo per esempio l’ implementazione in C, sicuramente una delle più complicate:
I processi di nuova creazione ereditano l'insieme di socket aperti dal processo che li ha creati. Talvolta, però, un processo ha bisogno di determinare l'indirizzo del socket di destinazione a cui si connette oppure di stabilire l'indirizzo di un socket locale. Queste informazioni vengono fornite dalle funzioni getpeername e getsockname. Oltre a collegare un socket a un indirizzo locale o connetterlo a un indirizzo di destinazione, sorge la necessità di un meccanismo che permetta ai programmi applicativi di controllare i socket. Ad esempio, quando si usano protocolli che utilizzano il timeout e la ritrasmissione, il programma applicativo può voler ottenere o impostare i parametri di timeout, l'assegnazione dello spazio del buffer, l'elaborazione di dati fuori banda o determinare se il socket consente trasmissioni di tipo broadcast. Invece di aggiungere nuove funzioni per ogni nuova operazione di controllo, i progettisti hanno deciso di creare un singolo meccanismo che ha due funzioni: gestsockopt e setsockopt. Per saperne di più consulta i seguenti approfondimenti:
Tutto quanto riportato in questa pagina è a puro scopo informativo personale. Se non ti trovi in accordo con quanto riportato nella pagina, vuoi fare delle precisazioni, vuoi fare delle aggiunte o hai delle proposte e dei consigli da dare, puoi farlo mandando un email. Ogni indicazione è fondamentale per la continua crescita del sito.