2010-11-04 9 views
3

Je suis en train d'exécuter du code ci-dessous:blocs async_connect io_service :: run_one() en boost :: asio

some_sock.async_connect(...); // handle_connect() sets the 'condition' flag 

boost::asio::deadline_timer t(ios, boost::posix_time::seconds(2)); 
while (t.expires_from_now() >= boost::posix_time::seconds(0)) 
{ 
    ios.run_one(); 
    if (condition) return; 
} 

comportement est Souhaitable retour de run_one() après la temporisation T est expiré (au bout de 2 secondes) . En fait, run_one() bloque jusqu'à ce que SYN-ACK ou RST soit reçu. Si le serveur ne répond pas, run_one() bloquera pendant plus de 2 secondes.

Que dois-je faire pour attendre la durée spécifiée pour que la connexion effectue un travail en arrière-plan?

Merci.

+1

Merci. t.async_wait (boost :: bind (empty_function())); résolu le problème. – excitoon

Répondre

0

Appelez run_one() pour connect() dans un autre thread. Au timeout, appelez some_sock.cancel(). (Lisez d'abord sa documentation).

Questions connexes