Hi folks, libssh2_channel_wait_closed() returns -34 (LIBSSH2_ERROR_INVAL) after shell is requested(libssh2_channel_shell()). It works fine (returns 0) when there is no shell open on channel.
Is there something extra I need to do to close the channel properly with shell running? Why cant I follow libssh2_channel_close() with libssh2_channel_wait_closed() when the shell is running? <Code>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> /******************************************************* * * * NO LICENSE, THIS CODE IS PUBLIC DOMAIN * * * * Written by Pioz * * To compile: "gcc -o ssh_client ssh_client.c -lssh2" * *******************************************************/ #include <arpa/inet.h> #include <stdio.h> #include <libssh2.h> int main (int argc, char **argv) { if (argc != 4) { fprintf (stderr, "usage: %s host user pass\n", argv[0]); return -1; } char *host = argv[1]; int port = 22; char *user = argv[2]; char *pass = argv[3]; int sock; LIBSSH2_SESSION *session; LIBSSH2_CHANNEL *channel; struct sockaddr_in sin; // Make a connection on port 22 sock = socket (AF_INET, SOCK_STREAM, 0); sin.sin_family = AF_INET; sin.sin_port = htons (port); sin.sin_addr.s_addr = inet_addr (host); if (connect (sock, (struct sockaddr*)(&sin), sizeof (struct sockaddr_in)) != 0) { fprintf (stderr, "Connection failed!\n"); return -1; } session = libssh2_session_init (); if (libssh2_session_startup (session, sock)) { fprintf (stderr, "SSH connection failed!\n"); return -1; } // Authentication if (libssh2_userauth_password (session, user, pass)) { fprintf (stderr, "Authentication failed!\n"); return -1; } printf ("Authentication successfully!\n"); // Open terminal if (!(channel = libssh2_channel_open_session (session))) { fprintf (stderr, "Cannot open channel!\n"); return -1; } printf ( "\nrequest_pty:\t%d", libssh2_channel_request_pty (channel, "vt100")); printf ( "\nshell:\t%d", libssh2_channel_shell (channel)); // Close terminal printf ( "\nclose:\t%d", libssh2_channel_close (channel)); printf ( "\nwait_closed:\t%d", libssh2_channel_wait_closed (channel)); libssh2_channel_free (channel); // Disconnect libssh2_session_disconnect (session, "Goodbye"); libssh2_session_free (session); printf ("\nAll done.\n"); return 0; } </Code>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cheers! Ravi
_______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel