Ok, ho trovato una soluzione. Grazie a Will e PRR ( il mio collega ).
non posso avviare un nuovo thread su ogni query, poiché si tratta di un'applicazione in tempo reale, che dovrebbe elaborare oltre 1000 messaggi al secondo..(comunque, grazie a R.. per l'idea).
Inoltre, non è stato possibile interrompere la connessione tramite la libreria, né annullare/chiudere la query, poiché il problema era nel server DB..
Ed ecco una soluzione di forza bruta, ma ancora molto meglio che _EXIT( FAILURE )
:Ecco la domanda correlata:"Come forzare la chiusura socket su Linux?"
- quindi, ho appena chiuso il socket usando una chiamata di sistema.
NOTA importante :(grazie Will) - Si è scoperto che il nostro wrapper della libreria MySQL ha il flag "fail-safe", quindi su socket chiuso (o altro errore critico), cerca di "risolvere" il problema, quindi riapre il socket , da solo, nel mio caso. Quindi, ho appena disattivato questa opzione e ora va tutto bene - l'esecuzione è terminata a causa di un'eccezione - questo è il modo "più morbido" per farlo.
Questo dovrebbe essere fatto attraverso un altro thread, ovviamente:un timer, per esempio.
MODIFICA: I timeout funzionano davvero per le versioni successive alla 5.0.25. Ma, almeno su RHEL4 e RHEL5, i timeout sono triplicati per qualche motivo! Ad esempio, se alcuni dei timeout sono impostati su 20 secondi, il timeout reale è di circa 60 secondi.
Inoltre, un'altra cosa importante è che questi timeout (come qualsiasi altra opzione) DEVONO essere impostato dopo mysql_init
e prima mysql_connect
o mysql_real_connect
.