Oké, ik heb een oplossing gevonden.. Met dank aan Will en PRR (mijn collega).
Ik kan niet start een nieuwe thread bij elke query, aangezien dit een realtime applicatie is, die verondersteld wordt 1000+ berichten per seconde te verwerken..(in ieder geval, dankzij R.. voor het idee).
Het was ook niet mogelijk om de verbinding via de bibliotheek te beëindigen, noch om de query te annuleren/stoppen, omdat het probleem zich in de DB-server bevond.
En hier is een brute-force oplossing, maar nog steeds veel beter dan _EXIT( FAILURE )
:Hier is de gerelateerde vraag:"Hoe sluiten te forceren socket op Linux?"
- dus ik heb zojuist de socket gesloten met een systeemoproep.
Belangrijke OPMERKING :(bedankt Will) - Het bleek dat onze MySQL-bibliotheekwrapper een "fail-safe" vlag heeft, zodat het bij een gesloten socket (of een andere kritieke fout) het probleem probeert op te lossen, dus het heropent de socket , op zichzelf, in mijn geval. Dus ik heb deze optie zojuist uitgeschakeld en alles is nu in orde - de uitvoering is beëindigd vanwege een uitzondering - dit is de "zachtste" manier om dit te doen.
Dit moet natuurlijk via een andere thread worden gedaan - een timer, bijvoorbeeld.
BEWERKEN: De time-outs werken echt voor versies na 5.0.25. Maar in ieder geval op RHEL4 en RHEL5 zijn de time-outs om de een of andere reden verdrievoudigd! Als sommige time-outs bijvoorbeeld zijn ingesteld op 20sec, is de echte time-out ~60sec..
Een ander belangrijk ding is dat deze time-outs (zoals alle andere opties) MOET worden ingesteld na mysql_init
en voor mysql_connect
of mysql_real_connect
.