Timeout. Socket Avanzati. Funzione alarm() Client echo UDP con alarm

Documenti analoghi
Opzioni del Socket. Socket Options. Opzioni di Livello Socket. Livello delle Opzioni

LABORATORIO di Reti di Calcolatori

I/O su Socket TCP: read()

Laboratorio di Reti di Calcolatori

Acknowledgment: Prof Vincenzo Auletta, Università di Salerno. Approfondimento alla programmazione distribuita

Socket. Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server.

Socket. Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server.

Esercitazione [5] Input/Output su Socket

Progettazione di Applicazioni Robuste. Applicazione Echo. Schema Generale di un Server TCP Ricorsivo 1. Applicazione echo

Funzioni bloccanti e soluzioni. Funzioni bloccanti e soluzioni (2) Parametri della funzione select() Funzione select()

Interazione con il DNS Conversioni di Nomi ed Indirizzi

request reply richiesta client processo di servizio processo server principale From - Valeria Cardellini, Corso Sist. Distr. A.A.

Sviluppo di Applicazioni su Rete. Introduzione all API socket di Berkeley. Interazione tra Processi. Modello Client-Server

Reti di Calcolatori - Laboratorio. Lezione 7. Gennaro Oliva

Socket TCP. prima parte

Cenni di programmazione distribuita in C++ Mauro Piccolo

Programmazione di applicazioni di rete

Paradigma client-server

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Laboratorio di Sistemi Operativi Cognome Nome Mat.

File I/O. M. R. Guarracino: File I/O 1

Sistemi Operativi Anno Accademico 2011/2012. Segnali: Interrupt software per la gestione di eventi asincroni

DATAGRAM SOCKET. Angelastro Sergio Diomede Antonio Viterbo Tommaso

Architettura degli elaboratori Docente:

IPC Inter Process Communication

Sistemi di Elaborazione. Introduzione alla Programmazione distribuita

Opzioni per le Socket

Uso di sniffer ed intercettazione del traffico IP

Una semplice applicazione client/server 1

Il modello Client/Server. La comunicazione

IPC System V. Code di messaggi

Quinta Esercitazione. Principali primitive di accesso ai File

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

Esercitazione Laboratorio di Sistemi Operativi Cognome Nome Mat.

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ&

Laboratorio di Reti di Calcolatori

Una socket è un punto estremo di un canale di comunicazione accessibile mediante un file descriptor. Alcuni tipi predefiniti di socket

Digressione: man 2...

Gestione di files Motivazioni

Le Opzioni per i Socket

LA MEMORIA NEL CALCOLATORE

Laboratorio di Sistemi Operativi

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

COMUNICAZIONE TRA PROCESSI REMOTI IN UNIX

Esercizio sulla gestione di file in Unix

POSIX - Gestione dei Segnali. E.Mumolo, DEEI mumolo@units.it

Guida all' uso dei sockets nella programmazione in C

Interprocess Communications - II. Franco Maria Nardini

Avviso ai programmatori. Programmazione in rete: i socket. Esercizio - copia dati. Messaggi di errore. stdarg.h. Funzioni di errore

Sincronizzazione e comunicazione tra processi in Unix. usati per trasferire ad un processo l indicazione che un determinato evento si è verificato.

Esercitazione [6] Client/Server con Socket

Socket per TCP: Fondamenti

Sistemi Operativi. Sistemi I/O SISTEMI DI INPUT/OUTPUT. Hardware di I/O. Interfaccia di I/O per le applicazioni. Sottosistema per l I/O del kernel

INGEGNERIA DEL WEB. VinX

SC per Inter Process Comminication. Comunicazione fra macchine diverse: socket

I/O Multiplexing select() e poll()

Laboratorio di Sistemi Operativi

rsystem Maximiliano Marchesi

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

Architetture di rete. 4. Le applicazioni di rete

I Socket. Laboratorio Software M. Grotto R. Farina

Inter-process communication: socket

I Socket in PHP. Introduzione. Gestione degli errori nei socket. Funzioni socket di PHP. (manuale PHP)

10. Come pianificare appuntamenti

Definizione di metodi

Program m azione di Sistem a 6

Socket per TCP: Fondamenti

System call fcntl e record locking

FILE BINARI FILE BINARI

Heap e code di priorità

Elementi di programmazione con interfaccia Socket

LabVIEW parte II. Ing. Gianfranco Miele November 3, 2010

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 3. 1 strace : visualizzazione delle system call invocate da un processo

Programmazione dei socket di rete in GNU/Linux

Interfacciamento di periferiche I/O al μp 8088

Inter-Process Communication

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

4 GLI ARRAY E LE STRINGHE

L accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione.

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002

Il file system. Le caratteristiche di file, direttorio e partizione sono del tutto indipendenti dalla natura e dal tipo di dispositivo utilizzato.

Gestione dei processi

Corso di Laboratorio di Sistemi Operativi

Comunicazione tra Computer. Protocolli. Astrazione di Sottosistema di Comunicazione. Modello di un Sottosistema di Comunicazione

Interazione (TCP) Client-Server con le socket

Corso di laurea in Informatica. Reti di Calcolatori A.A Prof. Roberto De Prisco LABORATORIO. Lezione

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Esempio 1: stampa locale di file remoto

Ret e i Inf n o f rm r a m t a ich c e Terza esercitazione

Laboratorio di Programmazione in Rete

Il livello di Trasporto del TCP/IP

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Lunedì 24 Gennaio 2005, ore 15.00

programmazione distribuita Introduzione Introduzione alla programmazione distribuita

unsigned long inet_addr(cp) char *cp;

msg: un semplice server per scambio messaggio di testo

ESERCIZI DI PROGRAMMAZIONE C IN AMBIENTE UNIX

Introduzione ai Device Drivers in Linux. E.Mumolo, DEEI

HTTP adaptation layer per generico protocollo di scambio dati

LP1 Lezione 13: i File in C. Maurizio Tucci

Processi e Sincronizzazione. Laboratorio Software C. Brandolese M. Grotto

Transcript:

I semestre 02/03 Socket Avanzati Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/~auletta/ Università degli studi di Salerno Laurea e Diploma in Informatica 1 Timeout Abbiamo visto molte situazioni in cui è necessario fissare un su un operazione di I/O Per evitare che un applicazione si blocchi in attesa di dati che non arriveranno Ci sono tre tecniche per assegnare un ad un operazione sul socket funzione alarm() funzione select() opzioni del socket SO_RCVTIMEO e SO_SNDTIMEO Funzione alarm() Client echo UDP con alarm 2 #include <netdb.h> int alarm(unsigned int nsec); Genera un segnale SIGALRM l applicazione deve registrare un gestore per questo segnale il kernel interrompe l esecuzione della system call e chiama il gestore del segnale Il gestore restituisce il controllo all applicazione Controindicazioni L implementazione della gestione dei segnali non è standard La gestione di SIGALRM è unica in tutto il processo 3 socklen_t servlen, int ) { (1) if( signal(sigalrm, sig_) ) err_sys("errore in signal"); (2) n = strlen(sendline); if( sendto(sockd, sendline, n, 0, p_servaddr, servlen)!= n ) err_sys("errore nella sendto"); alarm(); (3) if( (n = recvfrom(sockd, recvline, MAXLINE, 0, NULL, NULL)) < 0 ) if( errno == EINTR ) err_msg("socket "); (4) else err_sys("errore in recvfrom"); alarm(0); (5) recvline[n] = 0; if( fputs(recvline, stdout) == EOF ) err_sys("errore nella fputs"); 2. Registra il gestore di SIG_ALRM Il gestore non fa nulla 3. Attiva l alarm prima di leggere 4. Se recvfrom è interrotta allora èscaduto il 5. Disattiva l alarm dopo aver letto

4 Funzione select con La select() prende un argomento di tipo timeval Permette di registrare i numeri di secondi e micro Il si applica a tutti i descrittori controllati dalla select La select() restituisce 0 se il è scaduto e non c è nessun descrittore pronto < 0 se c è stato un errore > 0 se ci sono descrittori pronti e la struttura timeval contiene il tempo rimanente 5 Client echo UDP con select() socklen_t servlen, int ) { (1) fd_set rset; struct timeval tv; /* scrive sul socket il contenuto di sendline */ FD_ZERO(&rset); FD_SET(sockd, &rset); (2) tv.tv_sec = ; (3) tv.tv_usec = 0; if( (n = select(sockd + 1, &rset, NULL, NULL, &tv)) < 0 ) (4) err_sys("errore in select"); if( n == 0 ) err_msg("socket "); (5) else /* legge dal socket e stampa su stdout */ 2. Registra il socket per la lettura 3. Setta il 4. Invoca la select 5. Se la select esce con 0 è scaduto il 6 Opzione SO_RCVTIMEO L opzione SO_RCVTIMEO fissa il sulle operazioni di lettura da un descrittore di socket Vale per tutte le operazioni di lettura da quel descrittore Utilizzabile solo per descrittori di socket Per le operazioni di scrittura si usa l opzione SO_SNDTIMEO 7 Client echo UDP con SO_RCVTIMEO socklen_t servlen, int ) { (1) struct timeval tv; tv.tv_sec = ; tv.tv_usec = 0; (2) if( (setsockopt(sockd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv))) ) err_sys("errore in setsockopt"); (3) /* scrive sul socket il contenuto di sendline */ n = recvfrom(sockd, recvline, MAXLINE, 0, NULL, NULL); if( n < 0 ) { if( errno == EWOULDBLOCK ) { (4) err_msg("socket "); continue; else err_sys("errore in recvfrom"); /* legge dal socket e stampa su stdout */ 2. fissa il valore del 3. Setta l opzione del socket 4. Se la recvfrom esce con EWOULDBLOCK èscaduto il

8 Funzioni recv() e send() ssize_t recv(int sockd, void* buff, size_t n, int flags); ssize_t send(int sockd const void* buff, size_t n, int flags); Numero di byte letti o scritti se OK Sono analoghe a read e write ma hanno un argomento in più (flags) Analogo al quarto argomento di sendto e recvfrom Definisce il comportamento della system call La variabile flags può essere usata soltanto per passare informazioni dal processo al kernel 9 Flag La variabile flags può contenere l OR logico di alcuni di questi valori MSG_DONTROUTE MSG_DONTWAIT MSG_OOB MSG_PEEK MSG_WAITALL Non legge la tabella di routing prima di spedire Operazione di lettura o scrittura eseguita in modalità non blocking Legge o invia dati fuori banda Legge i dati dal socket senza estrarli dal buffer Aspetta che tutti i dati siano pronti prima di leggere (come readn) Funzioni readv() e writev() Struttura iovec 10 #include <sys/uio.h> ssize_t readv(int fd, const struct iovec* iov, int iovcount); ssize_t writev(int fd, const struct iovec* iov, int iovcount); Numero di byte letti o scritti se OK Sono analoghe a read e write ma consentono di operare su più buffer contemporaneamente scattering (distribuzione) e gathering (raccolta) Utilizzate per evitare di inviare tanti piccoli pacchetti Con socket UDP una writev crea un unico datagram iov è un array di strutture iovec di lunghezza al più IOV_MAX Ogni struttura specifica un buffer 11 struct iovec { void* ; /* indirizzo di partenza del buffer */ int iov_len; /* lunghezza del buffer */ ; Es. una readv legge 180 caratteri

12 Funzioni recvmsg() e sendmsg() ssize_t recvmsg(int sockd, struct * msg, int flags); ssize_t sendmsg(int sockd, struct * msg, int flags); numero di byte letti o scritti se OK Sono le funzioni di I/O più generali Tutte le altre funzioni di I/O sono casi particolari di queste due Supportano Flags Lettura e scrittura da più buffer Specifica dell indirizzo Passaggio di dati ausiliari (ancillary data) Struttura struct { void* msg_name; /* indirizzo del socket */ socklen_t msg_namelen; /* lunghezza dell indirizzo */ struct iovec* msg_iov; /* array di buffer */ size_t msg_iovlen; /* lunghezza di msg_iov */ void* msg_control; /* dati ausiliari */ socklen_t msg_controllen; /* lunghezza di msg_control */ int msg_flags; /* flag restituiti da recvmsg() */ ; L argomento flags è usato solo da sendmsg() per passare flags al kernel Stessi valori di recv() msg_flags è usato solo da recvmsg() per contenere i flag ricevuti dal kernel 13 Restituisce anche MSG_BCAST, MSG_MCAST, MSG_TRUNC (messaggio troncato), MSG_CTRUNC (dati ausiliari troncati) 14 Dati Ausiliari I dati ausiliari possono essere passati o ricevuti solo utilizzando sendmsg() e recvmsg() Usati per passare informazioni da un protocollo ad un altro Es. opzioni IP_RECVSTDADDR, IP_RECVIF Passare informazioni dal processo figlio al processo padre o tra processi indipendenti (socket UNIX) Il campo msg_control è formattato come un insieme di oggetti di dati (ancillary data object) Oggetti distinti possono avere differenti lunghezze Per manipolare gli oggetti si usano macro ad hoc Ogni oggetto inizia con una struct c 15 Struttura c struct { socklen_t cmsg_len; /* lunghezza di un blocco */ struct iovec* cmsg_level; /* protocollo che ha prodotto i dati */ size_t cmsg_type; /* specifico del protocollo */ unsigned char cmsg_data[]; ; I dati devono essere allineati con la struct Ci possono essere caratteri di riempimento tra cmsg_type e cmsg_data

16 Operazioni su Dati Ausiliari struct c* CMSG_FIRSTHDR(struct * mhdrptr); /* restituisce il puntatore al primo blocco o NULL */ struct c* CMSG_NXTHDR(struct * mhdrptr, struct c* cmsgptr); /* restituisce il puntatore al prossimo blocco o NULL */ unsigned char* CMSG_DATA(struct c* cmsgptr); /* restituisce un puntatore al primo byte di cmsg_data */ unsigned int CMSG_LEN(unsigned int length); /* restituisce il valore di cmsg_len */ unsigned int CMSG_SPACE(unsigned int length); /* restituisce la dimensione complessiva di un oggetto */ 17 Esempio Chiama recvmsg() su un socket UDP con opzione IP_RECVSTDADDR settata per ricevere un datagram di 170 byte inviato da 198.69.10.2:2000 all indirizzo 192.41.218.225 msg_name msg_namelen 16 msg_iov msg_iovlen 3 msg_control msg_controllen20 msg_flags 0 iovec Esempio 18 Contenuto della struttura restituita da recvmsg() msg_name msg_namelen 16 msg_iov msg_iovlen 3 msg_control msg_controllen16 msg_flags 0 sockaddr_in 16, AF_INET, 2000 198.69.10.2 c cmsg_len cmsg_level cmsg_type iovec 16 IPPROTO_IP IP_RECVSTDADDR 192.41.218.225