¿Cómo detectar cuándo ha finalizado la conexión ssh (sobre un QProcess)?
Estoy ejecutando un túnel ssh desde una aplicación usando unQProcess
:
QProcess* process = new QProcess();
process->start("ssh", QStringList()<<"-L"<<"27017:localhost:27017"<<"example.com");
Hasta el momento funciona bien, el único problema es que no hay forma de que vea cuándo se ha creado realmente el puerto.
Cuando ejecuto el comando en un shell, tarda unos 10 segundos en conectarse al host remoto, después de lo cual el puerto reenviado está listo para su uso. ¿Cómo lo detecto desde mi aplicación?
EDITAR:
Según lo sugerido por vahancho, usé el hecho de que después de la conexión hay una salida en el terminal que se puede usar para detectar que la conexión ha tenido éxito. Sin embargo, hay una línea que se ejecuta instantáneamente después del lanzamientoPseudo-terminal will not be allocated because stdin is not a terminal
, lo que probablemente daría una falsa alarma. La salida correcta está disponible en la segunda señal, emitida un poco más tarde (que es un verdadero indicador del puerto que se está abriendo). Para deshacerme del primer mensaje, ahora estoy ejecutando ssh usandossh -t -t
forzar una asignación estándar.
Entonces, la única pregunta que queda es, ¿puede alguien ayudarme sin ninguna preocupación en este enfoque?