[C++] boost::asio::async_write triggered geen callback

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Ik ben bezig met een Stratum client voor een cryptocoin miner. Stratum is een simpel line-based TCP protocol met JSON-encoded messages. De mining client connect met een stratum server die dan periodiek nieuw werk naar de miner stuurt.

Ik werk met boost::asio async writes en reads.

Ik ben nu zover dat ik kan connecten met de server en de eerste call ("mining.subscribe") kan plaatsen en de return kan lezen. Daarna volgt nog een call ("mining.authorize"). En wat daarna komt zie ik dan wel weer. Het probleem zit hem in de tweede call. Daarvan wordt de callback alleen getriggerd als ik m'n debugger break vlak voor aanvang van de call. Als ik de code gewoon laat lopen werkt alleen de eerste.

Ik heb het idee dat ik structureel iets verkeerd doe met boost::asio, maar ik weet niet wat. Ik heb het vermoeden dat m'n io_service::run() ermee stopt als ik niet break, maar ik weet niet hoe ik die aan de gang moet houden.

De code staat hier: https://github.com/Genoil...m/tree/stratum/libstratum

Alle reacties


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 11-10 14:49
Hunch : er loopt iets scheef in de TCP transacties tussen de subscribe en authorize (doordat je readuntil doet en stop bij '\n'?). Is de TCP transactie van de subscribe nog niet afgelopen als de callback van can subscribe getriggered wordt?

Iig duidt het feit dat het met een break(pauze) er tussen wel werkt op een timing ding.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Ja zoiets. Als ik break voor de 2e async_read_until in authorize_handler, maar dus niet voor de 2e async_write, dan komt ie daar wel maar niet in read_authorize_handler.

Wireshark toont een lege response van de server op die 2e method call en vervolgens een vijftal TCP retransmissions van dezelfde call.

Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Toch maar even een update voor de archieven...het bleek een firewall probleem, niks mis met de code.

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 11-10 14:49
En door de pauze vond de firewall dat er wel iets mocht gebeuren wat normaal niet mocht?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Nee ik dacht dat ik een antwoord kreeg op de 2e query, terwijl het eigenlijk nog onderdeel was van het antwoord op de eerste.
Pagina: 1