INDIETRO SU AVANTI

Applicativi a connessione

Gli applicativi a connessione hanno ruoli di server e client ben diversi, e corrispondenti sequenze diverse di funzioni in Linguaggio C.

Il Server

Dopo la creazione di un socket di descrittore, p. es., sd, il server associa un indirizzo al socket con la funzione bind:

rc = bind ( sd, indirizzo, lunghezza );

Ove:


A questo punto il server si mette in ascolto sul socket con la funzione:

rc = listen ( sd , lungcoda ); Ove:


Quindi il server invoca la funzione:

nuovo_sd = accept ( sd , indircli, lungcli );

Questa funzione e' la corrispettiva della funzione connect del client (vedi sotto) ed e' quella che effettivamente apre la connessione dal lato server.

In questa funzione di accept:


Il Client

Il processo client dopo la creazione di un socket che gli ha fornito un descrittore sd, invoca la funzione:

rc = connect ( sd , indirizzo , lunghezza );

Ove:

Anche la chiamata connect e' sincrona e bloccante per il processo. Il sottostante protocollo di comunicazione quasi sempre fornisce un timeout e la funzione ritorna con errore se la connessione non avviene in questo tempo. Ci pensa il protocollo di comunicazione a gestire il fatto che la connessione era stata richiesta al socket di ascolto del server ma poi data su un socket di servizio.


Operazioni dopo la Connessione

Una volta stabilita la connessione il client e il server possono leggere e/o scrivere da/in un socket. E' evidente che se il programma del client prevede la scrittura di certe informazioni, il corrispondente programma server deve prevederne la lettura, e viceversa.

Le funzioni disponibili sono read e write.

Lettura

num = read ( sd, buffer, lunghezza );

Ove:

La lettura e' bloccante e sincrona: il processo viene sospeso fino che non vi siano effettivamente dei byte da leggere dal socket, ovvero fino che il corrispondente non abbia eseguito una operazione di scrittura. A seconda dei protocolli di trasporto usati puo' essere impostato un timeout massimo di attesa.

Scrittura

num = write ( sd, buffer, lunghezza );

Anche la scrittura e' sincrona: il processo scrivente viene sospeso o per un timeout massimo o finche' il corrispettivo processo non abbia eseguito la lettura.