Sistemi di elaborazione dell'informazione / Reti

Socket, funzionamento simultaneo

Un server implementato per la ricezione di richieste socket può gestire le richieste interattivamente o simultaneamente.

Nel caso di un server simultaneo, il socket usato dal processo che accetta le connessioni ha un carattere jolly per la destinazione esterna (nella sockaddr), che gli consente di connettersi a un sito esterno arbitrario. Quando arriva un segmento TCP, viene inviato al socket connesso all'indirizzo indicato nella richiesta. Se non esiste alcun socket di questo tipo, il segmento verrà inoltrato al socket che ha un carattere jolly come destinazione esterna. Poiché il socket la cui destinazione esterna è indicata tramite caratteri jolly non ha una connessione aperta, riceverà solo i segmenti TCP che richiedono una nuova connessione. Il socket fornisce un'altra possibilità interessante per il progetto dei server multipli. L’idea base è permettere a un singolo processo di aspettare connessioni su più socket. La chiamata di sistema relativa si chiama select e si applica all'I/O in generale, non solo alla comunicazione su socket. Select ha la forma seguente:

nready = select(ndesc, indesc, outdesc, excdesc, timeout)

In generale, una chiamata a select blocca l'esecuzione aspettando che uno di un insieme di descrittori di file sia pronto. L'argomento ndesc specifica quanti descrittori devono essere esaminati (da 2 a ndesc-1). L'argomento indesc è un puntatore a una maschera di bit che determina i descrittori di file da controllare per l'input, outdesc è un puntatore a una maschera di bit che specifica i descrittori di file da controllare per l'output ed excdesc è un puntatore a una maschera di bit che specifica i descrittori di file da controllare in condizioni eccezionali. Se l'argomento timeout non è zero, è l'indirizzo di un intero che specifica per quanto tempo aspettare una connessione prima di ritornare al chiamante. Un valore zero invece, per il timeout, fa sì che la chiamata blocchi l'esecuzione finché non è pronto un descrittore. La chiamata a select restituisce i descrittori dell'insieme specificato che sono pronti per eseguire l'I/O. Modifica anche le maschere di bit specificate da indesc, outdesc ed excdesc per informare l'applicazione di quali tra i descrittori di file selezionati sono pronti. Per comunicare con più di un socket alla volta, il processo crea tutti i socket che gli servono e poi usa select per stabilire quale di essi diventa pronto per primo. Una volta trovato un socket che è pronto, il processo lo usa per comunicare tramite le procedure d'input o di output definite.





















































Tutto quanto riportato in questa pagina è a puro scopo informativo personale. Se non ti trovi in accordo con quanto riportato nella pagina, vuoi fare delle precisazioni, vuoi fare delle aggiunte o hai delle proposte e dei consigli da dare, puoi farlo mandando un email. Ogni indicazione è fondamentale per la continua crescita del sito.