Newsgroup: it.comp.lang.c
Titolo: Programmazione con socket unix

Domanda: e` possibile "ritardare" la accept di un nuovo client?
Mi spiego meglio.
Contesto: ho un server concorrente singolo processo (quello con la
select per intenderci) e tanti client collegati. Un nuovo client si
connette al server.
Nel funzionamento classico alla connect del client segue immediatamente
la accept del server che quindi dedica al nuovo arrivato una socket
specifica e su questa continua la comunicazione (previo settaggio della
nuova socket nella maschera della select).
E se io voglio subordinare l'accept del nuovo arrivato? Poniamo ad
esempio per aspettare l'arrivo di un messaggio di una altro client o
comunque subordinare l'accept ad un evento particolare come faccio?
Se mi limito lato server a posticipare la accept; lato client mi accorgo
che il programma continua ad eseguire le istruzioni successive la
connect (che non e` bloccante). Tipicamente trova una write che crea
casini perche` scrive sulla socket di connessione del server e non su
quella specifica di comunicazione (che viene resa disponibile dalla
accept). E quand'anche mettessi qualcosa di bloccante sul client che ha
appena fatto la connect come lo sblocco quando, lato server, ho deciso
che e` ora di fare la sua accept?
Grazie a tutti
-- 
Giuseppe R.
E-mail: mailto:
giuseppe...@SPAMnetit.alcatel.it
--
Posted from 
ns.alcanet.it
 [194.243.74.35] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 accept).
Controllare il ritorno della connect e' sempre cosa buona e' giusta.
--
 Ciao, Luca.
 Reply to 
luca....@tiscalinet.it

 Controllare il ritorno della connect e' sempre cosa buona e' giusta.
Chiaramente il controllo sulla connect c'e' e non da' errore!


 sempre che non sbagli io in qualche altro punto)
Come dici poco sopra, non hai bisogno di aspettare la accept per
stabilire che la connect ha funzionato, ma il problema e' un altro:
non puoi usare la socket senza che prima il server abbia fatto una
accept della richiesta di connessione. Quando crei una socket passiva,
usi una coppia < IP,porta > che identifica la socket, e viene eseguita
una listen (oltre ad altri particolari che tralascio) per attendere le
richieste di connessione. Quando un client, conoscendo la coppia <
IP,porta >, esegue una connect al server, prende possesso della socket
e il server non puo' piu' accettare connessioni fino a che non esegue
una accept, che non fa altro che creare un altra socket (ossia il
ritorno della accept) che ha ovviamente lo stesso IP di quella
precedente _ma_porta_diversa_ , per poter accettare nuovamente
richieste di connessione sulla prima socket. Non farti spaventare da
quel "porta diversa", perche' il tutto avviene in modo totalmente
trasparente al client.
Non ho mai provato, cmq penso che eseguire una write su una socket su
cui non e' ancora stata fatta una accept, dia errore perche' i dati
trasmessi vengono interpretati come se fossero inviati da una connect.
Spero di essere stato abbastanza chiaro e d'aiuto; se cosi' non fosse,
chiedi pure.
P.S. Non cambiare il subject nello stesso thread, perche' qualcuno
     potrebbe avere dei problemi con l'ordinamento dei messaggi
P.P.S. Curiosita': stai per caso facendo il progetto di Architetture
       degli Elaboratori 2 alla Statale di Milano?


        degli Elaboratori 2 alla Statale di Milano?
Quasi... il progetto e' quello ma l'esame e' Sistemi 2, ebbene si' sono
ancora del vecchio ordinamento!!!
In effetti non frequento il dipartimento e non ho seguito nessun corso
di programmazione e sto facendo un sacco di fatica a trovare materiale
veramente utile su questi argomenti. Al di la' del man unix e del libro
che citavi tu stesso non trovo altro che le solite paginette
introduttive sulle primitive ma esempi completi e spiegazioni
approfondite: nulla.
Anche in rete non cambia molto, un sacco di roba sulla programmazione
'algoritmica' in C ma pochissimo sull'interazione col sistema operativo.
Saluti


 approfondite: nulla.
E' un problema che ho avuto anch'io quando ho fatto questo progetto.
Ho trovato solo qualche pagina, tra cui quella di De Paoli, un docente
del DSI, non so se lo conosci. Se ti interessano te le posso mandare,
in totale sono uno zip di circa 70k.
