Chiamate bloccanti

6
Sistemi di elaborazione dell’informazione Modulo 4 - Tecniche di programmazione distribuita Unità didattica 1 - Socket library Ernesto Damiani Lezione 6 – Select

description

Chiamate bloccanti. Molte delle funzioni esaminate bloccano il programma che le chiama fino a un determinato evento: accept : fino a che non arriva una connessione; connect : fino a che non viene stabilita la connessione; recv , recvfrom : fino a che non viene ricevuto un pacchetto (di dati); - PowerPoint PPT Presentation

Transcript of Chiamate bloccanti

Page 1: Chiamate bloccanti

Sistemi di elaborazione dell’informazione

Modulo 4 - Tecniche di programmazione distribuita

Unità didattica 1 - Socket library

Ernesto Damiani

Lezione 6 – Select

Page 2: Chiamate bloccanti

Chiamate bloccanti

• Molte delle funzioni esaminate bloccano il programma che le chiama fino a un determinato evento:

– accept: fino a che non arriva una connessione;– connect: fino a che non viene stabilita la connessione;– recv, recvfrom: fino a che non viene ricevuto un pacchetto (di

dati);– send, sendto: fino a che i dati non vengono immessi nel buffer

del socket.

• Per programmi semplici il blocco è utile.

• Nel caso di programmi più complessi diventa un problema:

– connessioni multiple;– invio e connessioni simultanee.

Page 3: Chiamate bloccanti

Chiamate non bloccanti

Opzioni:

• usare chiamate bloccanti, ma scrivere codice multi-thread o multiprocesso;

• disattivare la funzione di blocco, per esempio usando la funzione di controllo del descrittore di file fcntl;

• usare la chiamata select.

Page 4: Chiamate bloccanti

Chiamata select (1)

• Può essere bloccante permanentemente, bloccante per un tempo limitato o non bloccante.

• Input: una serie di descrittori di file.

• Output: informazioni sullo stato dei descrittori di file.

• Identifica i socket che sono “pronti per l’uso”, su cui sono disponibili dei dati.

Page 5: Chiamate bloccanti

Chiamata select (2)

• Usa la struttura struct fd_set

– È un vettore di bit.

– Se il bit i è impostato a [readfds, writefds, exceptfds], select controllerà se il descrittore di file (cioè il socket) i è pronto per [lettura, scrittura, eccezione].

• Prima di chiamare select

– FD_ZERO(&fdvar): cancella la struttura;

– FD_SET(&fdvar): per controllare il descrittore di file i.

• Dopo aver chiamato select

– Int FD_ISSET(i, &fdvar): booleano restituisce TRUE se i è “pronto”.

Page 6: Chiamate bloccanti

Chiamata della funzione select

• int status = select(nfds, &readfds, &writefds, &exceptfds, &timeout);

– status: numero di oggetti pronti, altrimenti -1;

– nfds: 1 + il descrittore di file più grande da controllare;

– readfds: elenco di descrittori da controllare perchè pronti alla lettura;

– writefds: elenco di descrittori da controllare perchè pronti alla scrittura;

– exceptfds: elenco di descrittori da controllare perchè si è verificata un’eccezione;

– timeout: tempo dopo il quale select ritorna, anche se nulla è pronto (può essere 0 o ) (parametro di timeout punta a NULL per ).

FINE