Newsgroup: it.comp.lang.c++
Titolo: usare più di un socket asincrono con Winsock

Ciao a tutti,
sto realizzando un programma che ha bisogno di molte connessione
parallele, quindi di molti socket. Volevo evitare di usare un thread
per socket, così ho pensato di usare i socket asincroni, usando o
WSAEventSelect o WSAAsyncSelect (con qualche accorgimento si possono
usare tutte e due con gli stessi risultati, io propenderei per la
prima, per varie ragioni che ora non sto a spiegare...). Il problema è
che con:
- WSAEventSelect mi chiama un evento che posso attendere, insieme ad
uno o più (io proverei a metterne uno per socket), con
WaitForMultipleObjects... Il problema è che a questo punto, agli
eventi non posso associare il socket in questione e altre strutture
che sono necessarie in maniera automatica, ma dovrei scorrermi tutta
la lista degli HANDLE degli eventi per vedere quale è.
-WSAAsyncSelect: manda messaggi che contengono anche l'istanza di
socket associata. Qui un po' mi risolve, ma non posso associare al
socket un puntatore alle strutture di cui parlavo prima. Quindi anche
in questo caso per vedere l'associazione socket->struttura devo fare
una ricerca.
Non so se ho spiegato bene il problema... quello che vorrei è che
insieme alle notifiche FD_READ possa associare almeno un puntatore a
una struttura che mi interessa, che conterrà il socket e altre cose
che mi servono.
Avete idee? e sopratutto... mi sono spiegato bene?
ciao dario.

 [...]
Saluti  Manlio Perillo

 
Per tornare in parte in topic:
http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio/overview/core/
async.html
Manlio Perillo

Cos'è Boost asio? ne ho sentito parlare e a dir la verità ero anche
tentato di iniziare ad usare quella... Te che sei programmatore posix,
che dici? è abbastanza flessibile? Ci si possono fare cose complesse?
On 29 Ott, 23:04, Manlio Perillo <manlio_perill...@SPAMlibero.it>
wrote:


 
Mi dispiace, non l'ho mai usato.
Manlio Perillo

 che dici? è abbastanza flessibile? Ci si possono fare cose complesse?
Io (tempo permettendo) volevo cominciare ad usarla. Per ora sono solo 
riuscito a compilare le librerie ed un esempio. Però mi pare molto ben 
fatta.
E.

 fatta.
E' un'ottima libreria, nasconde bene le differenze nella gestione dei 
socket tra windows e resto del mondo, gestisce bene l'asincronicita', a 
patto che tu abbia il controllo del tuo main loop.
Se usi ad esempio un'interfaccia grafica tipo QT o GTK non hai questo 
tipo di controllo e risulta difficile interfacciare boost asio con il 
sistema a callback di suddetti toolkit grafici.
Bye,
  Gaby

   Gaby
Ciao  Manlio

 esempio Twisted (un framework asincrono in Python).
Si, con gtk per esempio e` sufficiente scrivere qualcosa del tipo:
while (gtk_events_pending()) gtk_main_iteration();
Per fare il flush ogni tanto degli eventi nel proprio main loop, il 
punto era non tanto criticare gtk o qt, ma spiegare quale e` uno dei 
limiti di asio, cioe` il fatto che richiede di avere il controllo del 
main loop (e tipicamente le gui mal si integrano con il multithread, nel 
senso che gran parte dei sistemi operativi/gui-toolkit multipiattaforma 
ha come requisito che tutte le operazioni sulla gui vanno effettuate dal 
thread che crea la finestra).
Probabilmente anche le GUI evolveranno verso qualcosa di piu` thread 
safe ora che i sistemi multicore sono la routine, per questioni di 
comodita', non certo per questioni di performance o di infattibilita'...
---
Bye,
  Gabry

 
Difficile che accada nel prossimo futuro.
Ciao  Manlio