Laboratorio di Programmazione in Rete

Documenti analoghi
Opzioni per le Socket

TECN.PROG.SIST.INF. UDP socket in Windows. Roberta Gerboni

L uso di Socket UDP. Usiamo le API Winsock incluse in <Winsock.h> A.A. 2005/06. Dott.ssa Valeria Carofiglio

Laboratorio di Programmazione in Rete

Introduzione alla programmazione C di socket

Laboratorio di Programmazione in Rete

API Socket di Berkeley

Creare una applicazione Winsock di base

LABORATORIO di Reti di Calcolatori

Laboratorio Reti di Calcolatori (A.A ) Delfina Malandrino.

L uso di Socket UDP. TCP vs. UDP UDP

Programmazione in Rete

Laboratorio di Programmazione in Rete

P3-05: Socket Options

Una prima applicazione in C per l utilizzo delle socket

Interazione (TCP) Client-Server con le socket

Laboratorio di. Reti Informatiche. Corso di Laurea Triennale in Ingegneria Informatica A.A. 2016/2017. Ing. Niccolò Iardella

Laboratorio di. Reti Informatiche. Corso di Laurea Triennale in Ingegneria Informatica A.A. 2016/2017. Ing. Niccolò Iardella

Laboratorio reti AA 2007/2008. Dott. Matteo Roffilli Ricevimento in ufficio dopo la lezione

Laboratorio reti AA 2006/2007. Dott. Matteo Roffilli Ricevimento in ufficio dopo la lezione

TECN.PROG.SIST.INF. TCP socket in Windows Roberta Gerboni

Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di Calcolo Multi-Nodo

Comunicazione tra processi: pipe Le pipe sono un meccanismo UNIX di Inter Process Communication (IPC)

Laboratorio di Sistemi Operativi

IPC: InterProcess Communication

Scrittura dei programmi applicativi di rete

L interfaccia socket

Le Opzioni per i Socket

LABORATORIO di Reti di Calcolatori

IPC: InterProcess Communication

I/O su Socket TCP: read()

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

C UDP in Windows p53 - variante 1

Problema. I/O Multiplexing. Struttura delle Operazioni di Lettura. Modelli di I/O. Prof. Vincenzo Auletta

System call per l accesso a file

Processore Danilo Dessì. Architettura degli Elaboratori.

Interazione (TCP) Client-Server con le socket

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

funzione fork() La funzione fork è usata per duplicare un processo. #include <unistd.h> pid_t fork (void);

Laboratorio di. Reti Informatiche. Corso di Laurea Triennale in Ingegneria Informatica A.A. 2017/2018. Ing. Carlo Vallati

Simulazione esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

Esercitazione [09] Approfondimento su Letture e Scritture con Descrittori

Laboratorio di Sistemi Operativi Marzo-Giugno 2008 Matricole congrue 0 mod 3

GESTIONE DELLA COMUNICAZIONE LOCALE TRA PROCESSI IN UNIX:

Laboratorio di Sistemi Operativi primavera 2009

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine

LABORATORIO di Reti di Calcolatori

L interfaccia Socket

Esercitazione 4. Gestione dei file in Unix

LINUX: struttura generale

Laboratorio reti AA 2008/2009. Dott. Matteo Roffilli Ricevimento in ufficio dopo la lezione

Capitolo 3 -- Stevens

Esercitazione [7] Client/Server con Socket

Funzioni bloccanti e soluzioni

Controllo Winsock di Visual Basic

Laboratorio di Sistemi Operativi

Programmazione di Rete

Reti di Calcolatori - Laboratorio. Lezione 5. Gennaro Oliva

Il linguaggio C. Breve panoramica su stdio.h

Laboratorio reti AA 2008/2009. Dott. Matteo Roffilli Ricevimento in ufficio dopo la lezione

Scrittura dei programmi applicativi di rete

Laboratorio reti AA 2007/2008. Dott. Matteo Roffilli Ricevimento in ufficio dopo la lezione

Lezione 21. #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <sys/types.h> #include <sys/wait.

Lezione n.3 LIVELLO TRASPORTO

Ambienti di Programmazione per il Software di Base

Cenni di programmazione distribuita in C++ Mauro Piccolo

Sistemi Operativi SISTEMI DI INPUT/OUTPUT. D. Talia - UNICAL. Sistemi Operativi 10.1

Reti di Calcolatori:

SISTEMI OPERATIVI. Processi in Linux. Giorgio Giacinto Sistemi Operativi

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

Esercizi (1-2): da: TCP/IP Sockets in C (Donahoo-Calvert)

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

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

Laboratorio di Sistemi Operativi primavera 2009 open

Comunicazioni fra processi remoti: i socket nello UNIX di Berkeley

La funzione main() La funzione main(), presente in tutti i programmi C, è una funzione come tutte le altre

Politecnico di Milano FACOLTÀ DI INGEGNERIA DELL INFORMAZIONE. Prof. William FORNACIARI

Esempi di programmi client/server in Python

C: primi elementi. Lezione 4

Reti (già Reti di Calcolatori )

J+... J+3 J+2 J+1 K+1 K+2 K+3 K+...

La funzione main() (

Esame del 17 Luglio 2012

Esercitazione [5] Input/Output su Socket

// Riferimento al canale da processi esterni << nome del processo >>.channel; // Primitiva send send << valore >> to << porta >>;

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

Il sistema operativo LINUX Inter Process Communication. Sommario. popen ( ) PIPE. pipe ( ) popen ( ) Sistemi operativi Modulo II

I.I.S. G.B. PENTASUGLIA MATERA ISTITUTO TECNICO SETTORE TECNOLOGICO LICEO SCIENTIFICO SCIENZE APPLICATE. Classe: 5Ci

Completiamo le istruzioni condizionali: Istruzione switch Può essere usata per realizzare una selezione a più vie. Sintassi:

Esercitazione sulle Socket

2. Teoria. [7 punti] La comunicazione tra processi nel sistema UNIX.

DATAGRAM SOCKET. Angelastro Sergio Diomede Antonio Viterbo Tommaso

Socket (TCP/IP) Socket (TCP/IP) Concetto di socket. Cenni (reti)

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

i. Diagramma di GANTT relativo all esecuzione dei quattro processi:

syscall n Utilizzate come interfaccia col sistema operativo, funzioni diverse (n = 0..5) Assunzioni importanti:

UNIVERSITA DEGLI STUDI DI PAVIA

Transcript:

Laboratorio di Programmazione in Rete a.a. 2005/2006 http://www.di.uniba.it/~lisi/courses/prog-rete/prog-rete0506.htm dott.ssa Francesca A. Lisi lisi@di.uniba.it Orario di ricevimento: mercoledì ore 10-12 N.B. Il presente materiale didattico è stato prodotto da: dott.ssa V. Carofiglio rielaborato da: dott.ssa F.A. Lisi

modelli di I/O Per default una socket e bloccante: Applicazione Kernel quando la socket deve effettuare un operazione di I/O, se questa non puo essere terminata immediatamente il processo si mette in attesa aspettando la fine dell operazione. Lettura Recvfrom() Bloccata System Call OK Attesa Copia Non ci sono dati pronti Inizo Copia dott.ssa F. A. Lisi & dott.ssa V. Carofiglio Laboratorio di Programmazione in Rete (5/5) 2

modelli di I/O (cont.) Input con una socket Non Bloccante: Applicazione Kernel se l operazione di input non puo essere terminata (non c e nemmeno un byte per la socket TCP o nemmeno un datagram per la socket UDP) la funzione ritorna immediatamente al chiamante restituendo il codice d errore EWOULDBLOCK (polling). Lettura Recvfrom() Attesa System Call EWOULDBLOCK System Call EWOULDBLOCK OK Attesa Copia Non ci sono dati pronti Inizo Copia dott.ssa F. A. Lisi & dott.ssa V. Carofiglio Laboratorio di Programmazione in Rete (5/5) 3

modelli di I/O (cont.) Output in una socket Non Bloccante: Con una socket Non Bloccante di tipo TCP, se l operazione di scrittura non puo essere effettuata nemmeno in parte perche manca spazio nei buffer del TCP in cui andare a scrivere i dati, la funzione ritorna immediatamente al chiamante restituendo il codice d errore EWOULDBLOCK. Se invece e rimasto spazio, viene effettuata una scrittura di una porzione di dati minore o uguale alla dimensione del buffer libero, e la write restituisce il numero di byte scritti. Con una socket Non Bloccante di tipo UDP invece il problema non sussiste perchè nessun datagram viene mantenuto in un buffer in quanto non c è ritrasmissione, quindi il datagram UDP viene immediatamente spedito e vada come vada. Quindi una primitiva di output di una socket UDP non blocca mai il processo che l effettua. dott.ssa F. A. Lisi & dott.ssa V. Carofiglio Laboratorio di Programmazione in Rete (5/5) 4

modelli di I/O (cont.) Cambiare il comportamento delle socket per rendere le chiamate non bloccanti: Operazioni richieste possono essere completate immediatamente: il valore di ritorno della funzione indica successo altrimenti: il valore di ritorno della funzione indica fallimento (-1) (attenzione a distinguere) Winsock fa uso della funzione ioctlsocket() per controllare l I/O di una socket Unix fa uso della funzione fcntl() per controllare l I/O di una socket LE DUE FUNZIONI NON SONO EQUIVALENTI dott.ssa F. A. Lisi & dott.ssa V. Carofiglio Laboratorio di Programmazione in Rete (5/5) 5

La funzione fcntl() Consente (tra l altro) di settare i flag per il controllo del bloccaggio di una socket valida int fcntl (int socket, int command, long argument); descrittore di socket Specifica dei flag (O_NONBLOCK ) Operazione da effettuare (F_GETFL e F_SETFL) la procedura corretta per settare un flag consiste nel: leggere i flag del descrittore mediante il comando F_GETFL, modificare solo il flag che interessa, settare i nuovi flag per il socket mediante il comando F_SETFL dott.ssa F. A. Lisi & dott.ssa V. Carofiglio Laboratorio di Programmazione in Rete (5/5) 6

La funzione ioctlsocket() Consente (tra l altro) di settare i flag per il controllo del bloccaggio di una socket valida int ioctlsocket (int socket, int command, u_long *argument); descrittore di socket Non-0 per abilitare la modalità non bloccante Operazione da effettuare (FIONBIO FIONREAD.) FIONBIO: I/O bloccante o no FIONREAD: per determinare l ammontare di dati in pendenza nel buffer che puo essere letto dalla socket s dott.ssa F. A. Lisi & dott.ssa V. Carofiglio Laboratorio di Programmazione in Rete (5/5) 7

esempio di I/O non bloccante //------------------------- // Initialize Winsock WSADATA wsadata; int iresult = WSAStartup(MAKEWORD(2,2), &wsadata); if (iresult!= NO_ERROR) printf("error at WSAStartup()\n"); //------------------------- // Create a SOCKET object. SOCKET m_socket; m_socket = socket(af_inet, SOCK_STREAM, IPPROTO_TCP); if (m_socket == INVALID_SOCKET) { printf("error at socket(): %ld\n", WSAGetLastError()); WSACleanup(); return; } //------------------------- // Set the socket I/O mode: In this case FIONBIO // enables or disables the blocking mode for the // socket based on the numerical value of imode. // If imode = 0, blocking is enabled; // If imode!= 0, non-blocking mode is enabled. u_long imode = 1; ioctlsocket(m_socket, FIONBIO, &imode); dott.ssa F. A. Lisi & dott.ssa V. Carofiglio Laboratorio di Programmazione in Rete (5/5) 8

richiesta di connessione Operazioni di Richiesta Connessione (connect). Con una socket UDP la funzione connect() non e realmente bloccante, perche deve solo scrivere nel kernel l indirizzo IP e il numero di porta dell altro end-system, quindi anche nel caso di socket Non Bloccante la connect per l UDP effettua sempre l operazione interamente e restituisce il controllo al chiamante. Invece per il TCP la chiamata del client alla connect() di una socket bloccante deve aspettare che, all interno del three way handshake, il client abbia ricevuto il primo ACK. Solo allora puo veramente bloccare il processo. Se la socket TCP e di tipo Non Bloccante, la chiamata del client alla connect() fa iniziare il procedimento di inizio connessione, cioe fa spedire il primo ACK, ma se la connessione non puo immediatamente essere instaurata la connect() termina con un codice d errore EINPROGRESS ad indicare che l operazione continua a livello inferiore. dott.ssa F. A. Lisi & dott.ssa V. Carofiglio Laboratorio di Programmazione in Rete (5/5) 9

accettazione di una richiesta di connessione Operazioni di Accettazione Richiesta Connessione (accept). Con una socket Non Bloccante, se l operazione di accept non puo restituire immediatamente una nuova connessione perche la coda delle connessioni accettate e vuota, la funzione ritorna immediatamente al chiamante restituendo il codice d errore EWOULDBLOCK. Per i modelli di I/O, vedi par. 5.3, in particolare par. 5.3.1 di Donahoo & Calvert dott.ssa F. A. Lisi & dott.ssa V. Carofiglio Laboratorio di Programmazione in Rete (5/5) 10