2012-11-29 13 views
6

Ho letto che non sono consigliate più operazioni su socket da thread diversi. Ma cosa succede se chiamo dallo stesso thread socket.async_read e successivo socket.async_write (senza aspettare che il precedente termini)? Posso confermare che il callback appropriato verrà eseguito quando una di queste operazioni è completata?Boost.asio: posso fare async_read e async_write contemporaneamente da un thread?

+0

stai chiedendo informazioni sui socket TCP? –

risposta

11

Ho trovato che sì, è possibile avere un singolo in sospeso async_read e un singolo in sospeso async_write sullo stesso socket senza problemi. Quando si chiama il metodo io_service::run(), i callback verranno completati come previsto.

L'emissione di più async_reads sullo stesso socket o più async_writes sullo stesso socket può comportare un comportamento imprevisto, a seconda del tipo di socket in questione. In particolare, l'utilizzo di più async_writes sullo stesso socket TCP può comportare l'uscita di dati in un ordine diverso rispetto a quanto originariamente previsto e il mescolamento di dati inviati. In UDP, potrebbe essere più ragionevole, ma lo raccomanderei comunque.

Problemi correlati