Subject: About simple examples

About simple examples

From: Jean-Louis CHARTON <Jean-Louis.CHARTON_at_oikialog.com>
Date: Wed, 1 Apr 2009 14:41:51 +0200

Hi,

There's something in the examples that sounds strange to me.

In the write loop of some non blocking examples, we have:

do {
    nread = fread(mem, 1, sizeof(mem), local);
    if (nread <= 0) {
        /* end of file */
        break;
    }

    ptr = mem;

    do {
        /* write data in a loop until we block */
        while ((rc = libssh2_sftp_write(sftp_handle, ptr, nread)) ==
LIBSSH2_ERROR_EAGAIN) {
            ;
        }

        ptr += rc;
        nread -= nread;
    } while (rc > 0);
} while (1);

In the inner do while loop, shouldn't it be:

ptr += rc;
nread -= rc

instead of this curious:

ptr += rc;
nread -= nread;

=> after this; nread is always 0 (right ?) and if rc returned by
libssh2_sftp_write was < nread, then the next loop will be in fact
rc = libssh2_sftp_write(sftp_handle, ptr, 0)...

Other question:
when libssh2_sftp_write returns LIBSSH2_ERROR_EAGAIN, why not do a
select() on the socket instead of recall libssh2_sftp_write immediately
which I presume is consuming CPU cycles?

JL

------------------------------------------------------------------------------
_______________________________________________
libssh2-devel mailing list
libssh2-devel_at_lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libssh2-devel
Received on 2009-04-01