Tutto giusto tranne per una cosa:
tutti i socket sono avanti alla porta (quindi sono allo stesso livello) e non esisitono socket precompilati in quanto sono ignoranti: consegnano il pacco al destinatario senza sapere cosa c'è dentro.
Sta poi all'applicazione riconoscere che sono istruzioni http (decodificare).

quindi non esistono socket della scheda di rete e sochet applicative ma sono tutte uguali ed allo stesso livello.

I socket vengono creati (ricordi: uno ed uno solo per ogni applicazione) dall'applicazione ogni qualvolta voglia interfacciarsi con il flusso di rete.

Ti scrivo un piccolo esempio di pseudocode per la creazione di un socket.

SERVER

SC = CreateSocket(127.0.0.1) //indirizzo
SC.Listen(80) //porta
if SC.PacketsReceived.Text = "CIAO CIAO" then
SC.Close // Chiude il socket liberando la porta
else
... // Continua ad aspettare il pacchetto

CLIENT

SC = CreateSocket(128.0.0.9) //indirizzo
// SC.Listen non è necessario in quanto non riceve nulla
SC.SendOverNet (127.0.0.1, 80, "CIAO CIAO")
SC.Close

A fini didattici prova ad installare il programma ETHEREAL.
Questo programma ti fa vedere tutto il traffico sulla rete (quindi agisce come un socket)
e poi dopo interpreta i pacchetti e te li mostra. Molto utile ai fini della comprensione.

Fammi sapere.

Ciauz,

TOXiC