2010-12-07 36 views
2

boost :: asio gère-t-il correctement les connexions récursives du serveur?boost :: appels serveur asio et récursifs

J'ai un serveur asynchrone TCP/IP qui se connecte à lui-même depuis le gestionnaire async_read et semble bloquer: le prochain async_accept fonctionne mais les blocs async_read.

Le serveur est basé sur l'exemple http asio avec un pool de threads.

Il implémente une certaine API que les clients utilisent et peut également déléguer certaines fonctions à un autre serveur (agissant comme un proxy ou un nœud de cloud). Le problème est que lorsqu'un autre serveur est localhost (par exemple lui-même) le blocage se produit quelque part dans les bibliothèques asio.

Des suggestions?

+0

Pouvez-vous poster du code? –

+0

Eh bien, j'ai compris qu'il y a un brin SSL global dans ASIO qui provoque le blocage. C'est assez malheureux car je dois chercher une solution de contournement maintenant. En fait, il existe un patch qui améliore la situation mais ne la résout pas complètement: https://svn.boost.org/trac/boost/ticket/3958 – dremon

Répondre

1

En fait, j'ai découvert que le problème est avec les sockets SSL - la poignée de main fonctionne avec des blocages lorsque le serveur s'appelle lui-même. Probablement lié à un brin à l'intérieur du code asio ssl.

+2

Intéressant. Vous pourriez peut-être soumettre votre question à la liste de diffusion des utilisateurs de l'ASIO: https://lists.sourceforge.net/lists/listinfo/asio-users –