From 5d91d286f1512464ecf9c1acfbc160837d9ab605 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Mon, 24 Sep 2007 12:14:18 +0000 Subject: [PATCH] fix by Immanuel Gregoire, sizeof != strlen! --- example/simple/scp_nonblock.c | 45 +++++++++++++++++++++++++++-------- example/simple/sftp.c | 4 ++-- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/example/simple/scp_nonblock.c b/example/simple/scp_nonblock.c index 7527c88e..f7e8fc63 100644 --- a/example/simple/scp_nonblock.c +++ b/example/simple/scp_nonblock.c @@ -1,5 +1,5 @@ /* - * $Id: scp_nonblock.c,v 1.9 2007/08/09 01:10:11 dfandrich Exp $ + * $Id: scp_nonblock.c,v 1.10 2007/09/24 12:14:18 bagder Exp $ * * Sample showing how to do SCP transfers in a non-blocking manner. */ @@ -156,11 +156,12 @@ int main(int argc, char *argv[]) fprintf(stderr, "libssh2_scp_recv() is done, now receive data!\n"); while(got < fileinfo.st_size) { - char mem[1000]; + char mem[256000]; struct timeval timeout; int rc; - fd_set fd; + fd_set readfd; + fd_set writefd; do { int amount=sizeof(mem); @@ -172,32 +173,56 @@ int main(int argc, char *argv[]) /* loop until we block */ rc = libssh2_channel_read(channel, mem, amount); if (rc > 0) { +#if 0 write(1, mem, rc); +#endif got += rc; } + else { + //printf("libssh2 returned %d\n", rc); + } } while (rc > 0); if (rc == LIBSSH2_ERROR_EAGAIN) { /* this is due to blocking that would occur otherwise so we loop on this condition */ - timeout.tv_sec = 10; + timeout.tv_sec = 1; timeout.tv_usec = 0; - FD_ZERO(&fd); + FD_ZERO(&readfd); + FD_ZERO(&writefd); - FD_SET(sock, &fd); + FD_SET(sock, &readfd); + FD_SET(sock, &writefd); - rc = select(sock+1, &fd, &fd, NULL, &timeout); - if (rc <= 0) { - /* negative is error - 0 is timeout */ + rc = select(sock+1, &readfd, &writefd, NULL, &timeout); + if(rc < 0) { + fprintf(stderr, "SCP ERROR: %d\n", rc); + } + else if (rc == 0) { fprintf(stderr, "SCP timed out: %d\n", rc); } + else { +#if 0 + if(FD_ISSET(sock, &readfd)) { + printf("Readable socket\n"); + } + else if(FD_ISSET(sock, &writefd)) { + static counter=0; + printf("Writeable socket\n"); + if(counter++ > 200) + return 1; + } +#endif + } + + continue; } break; } + printf("Got totally %d bytes\n", (int)got); libssh2_channel_free(channel); channel = NULL; diff --git a/example/simple/sftp.c b/example/simple/sftp.c index 7355f062..4d65d24b 100644 --- a/example/simple/sftp.c +++ b/example/simple/sftp.c @@ -1,5 +1,5 @@ /* - * $Id: sftp.c,v 1.13 2007/08/09 01:10:11 dfandrich Exp $ + * $Id: sftp.c,v 1.14 2007/09/24 12:14:18 bagder Exp $ * * Sample showing how to do SFTP transfers. * @@ -147,7 +147,7 @@ int main(int argc, char *argv[]) fprintf(stderr, "\n"); /* check what authentication methods are available */ - userauthlist = libssh2_userauth_list(session, username, sizeof(username)); + userauthlist = libssh2_userauth_list(session, username, strlen(username)); printf("Authentication methods: %s\n", userauthlist); if (strstr(userauthlist, "password") != NULL) { auth_pw |= 1;