Subject: [libssh2] [ libssh2-Bugs-1588093 ] libssh2_poll_channel_read()

[libssh2] [ libssh2-Bugs-1588093 ] libssh2_poll_channel_read()

From: <>
Date: Wed, 06 Jun 2007 13:21:30 -0700

Bugs item #1588093, was opened at 2006-10-31 18:16
Message generated for change (Comment added) made by jehousley
You can respond by visiting:

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: None
Group: None
Status: Open
Resolution: None
Priority: 9
Private: No
Submitted By: Chris Nystrom (cnystrom)
Assigned to: Nobody/Anonymous (nobody)
Summary: libssh2_poll_channel_read()

Initial Comment:
I believe the following code demonstrates a bug with
the function libssh2_poll_channel_read(). This function
should return 1 when data is waiting to be read, but
always seems to return 0. In the program below I get a
return of zero, but I immediately and successfully read

I need this function to work properly so I can write a
wrapper over libssh2 so I can use it in a
multi-threaded application.


#include "ssh2_lib.h"
#include <stdio.h>
#include "../sock_lib/sock_lib.h"
#define SSH_PORT (22)
int main(int argc, char *argv[])
       int sock;
       char buf[256] = "";
       LIBSSH2_SESSION *session;
       LIBSSH2_CHANNEL *channel;
       const char *server = "";
       const char *username = "cnystrom";
       const char *passwd = "********";
       sock = init_tcp_client(server, SSH_PORT);
       if (sock <= 0) {
               return (-1);
       session = libssh2_session_init();
       if (libssh2_session_startup(session, sock)) {
               fprintf(stderr, "Failure establishing
SSH session\n");
       if (libssh2_userauth_password(session, username,
passwd)) {
               fprintf(stderr, "Authentication by
password failed.\n");
               return (-4);
       if (!(channel =
libssh2_channel_open_session(session))) {
               fprintf(stderr, "Unable to open a
               return (-5);
       libssh2_channel_set_blocking(channel, BLOCK);
       if (libssh2_channel_subsystem(channel, "hello")
!= 0) {
libssh2_channel_subsystem() failed.\n");
               return (-6);
       int i;
       // bug: should return 1, but returns 0
       i = libssh2_poll_channel_read(channel, 0);
       printf("i = %d\n", i);
       libssh2_channel_read(channel, buf, 256);
       printf("%s", buf);
       libssh2_session_disconnect(session, "Normal
       return 0;
>Comment By: James Housley (jehousley)
Date: 2007-06-06 20:21
Logged In: YES 
Originator: NO
Looking at the code, that is correct.  The code loops looking at the same
packet over and over.  There needs to be a call of some type to
libssh2_packet_read(), otherwise nothing will ever change in a single
threaded program.
You can respond by visiting:
This email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
libssh2-devel mailing list
Received on 2007-06-11