2010-12-07 22 views
2

Behandelt boost :: asio die rekursiven Serververbindungen korrekt?boost :: asio und rekursive Serveraufrufe

Ich habe einen asynchronen TCP/IP-Server, der sich innerhalb des async_read-Handlers mit sich selbst verbindet und scheinbar blockiert: Der nächste async_accept funktioniert, aber async_read blockiert.

Der Server basiert auf dem http asio-Beispiel mit einem Thread-Pool.

Es implementiert eine bestimmte API, die Clients verwenden, und kann einige der Funktionen auch an einen anderen Server delegieren (der wie ein Proxy oder ein Cloud-Knoten agiert). Das Problem ist, dass, wenn ein anderer Server localhost ist (z. B. sich selbst), der Deadlock irgendwo innerhalb von asio-Bibliotheken auftritt.

Irgendwelche Vorschläge?

+0

Können Sie etwas Code posten? –

+0

Nun, ich habe herausgefunden, dass es einen globalen SSL-Strang in ASIO gibt, der den Deadlock verursacht. Es ist ziemlich bedauerlich, da ich jetzt nach einem Workaround suchen muss. In der Tat gibt es einen Patch, der die Situation verbessert, aber nicht vollständig löst: https://svn.boost.org/trac/boost/ticket/3958 – dremon

Antwort

1

Ich fand tatsächlich, dass das Problem mit SSL-Sockets ist - die Handshake-Funktion Deadlocks, wenn der Server sich selbst anruft. Wahrscheinlich verwandt mit einem Strang innerhalb des asio ssl-Codes.

+2

Interessant. Vielleicht könnten Sie Ihre Frage an die ASIO-Benutzer-Mailingliste senden: https://lists.sourceforge.net/lists/listinfo/asio-users –