J'utilise libssh2 pour me connecter à un ordinateur distant, puis j'appelle libssh2_channel_exec pour exécuter un programme démon, le programme démon va alors sélectionner un port tcpip disponible et afficher le prot sélectionné sur la console (stdio) . Ensuite, le démon écoutera le port pour la connexion entrante. Après cette étape, le client lira le port TCP sélectionné de stdio par "libssh2_channel_read". Je peux obtenir la bonne valeur. Mais la question est: Lorsque je ferme le canal libssh2 (libssh2_channel_close()), le programme sera bloqué, jusqu'à la sortie du programme distant. Existe-t-il des méthodes pour fermer le canal sans fermer le programme distant? Parce que j'utilise ssh uniquement pour le login et le numéro de prot disponible, c'est enougn. En outre, le programme distant utilise QCoreApplication de Qt, donc après l'impression du prot disponible, il entrera dans la boucle d'événement de app.exec() pour répondre au client, donc, il ne doit pas quitter immédiatement après avoir imprimé le port nombre.libssh2_channel_close sera bloqué jusqu'à ce que la commande à distance exit
1
A
Répondre
0
Il une fonction libssh2 peut résoudre mon problème .. :) "libssh2_session_set_blocking" libssh_session_set_blocking (mysession, 0); // cela régler le libssh2 travail cinque mode non-bloquant.
Le travail de gauche à faire est de s'assurer que le client lit toute la sortie du serveur, sans bloquer, je dois contrôler l'EOF moi-même. :) Merci Stackoverflow, merci google!