On Apr 22, 2007, at 12:55 PM, Daniel Stenberg wrote:
> On Sun, 22 Apr 2007, James Housley wrote:
>
>> That and there is a long way/time to go until all the functions
>> exist in both modes. In the mean time, if the current blocking
>> state of the socket were detected and channel->blocking was set by
>> then, existing programs should continue to work with the new
>> versions of the library.
>
> Sorry, but I'm not following.
>
> I see two different ways to do the API
>
> 1) We have libssh2_channel_set_blocking() and it controls *ALL*
> functions to
> do blocking or non-blocking. This didn't work before, and I
> didn't take
> this route when I started to add *nb() functions.
You are correct it did not work before, and creating *nb() functions
make it very easy to slowly migrate to our goal of working fully in
both blocking and non-blocking mode. In the end I personally think
it might be better to only have one, but we can all debate that once
all the work is done, because right now we need both.
>
> 2) We have a set of *nb() functions for non-blocking operations.
> Why the need
> for libssh2_channel_set_blocking() then?
Right now an existing program works with libssh2 and uses the non-
blocking functions, lets only talk about libssh2_sftp_read(). After
calling libssh2_sftp_read() libssh will be told it is in non-blocking
mode, because at startup the library wasn't set to blocking (because
the function didn't exist before).
Later on the program calls libssh2_channel_close() or similar, but
now instead returning -1 on failure and 0 on success -2 (*_EAGAIN)
will be returned. The calling program will think this is a error and
abort. This is bacause the "non-blocking" sftp functions set the
libssh2 library into non-blocking mode, when it shouldn't be.
Basically functionality has been changed in a subtle way that will
cause programs to break.
>
> Are you saying you want libssh2_channel_set_blocking() to remain
> since we don't yet have all the *nb() functions we want and that
> the function actually make some of the non-*nb() functions non-
> blocking?
I am saying the library has to know for sure if it is in blocking or
non-blocking mode. This can be done with the added
libssh2_channel_set_blocking() function, but this won't help existing
programs. Or, the new function I proposed can be added so libssh2
just figures it out for itself.
Jim
-- /"\ ASCII Ribbon Campaign . \ / - NO HTML/RTF in e-mail . X - NO Word docs in e-mail . / \ ----------------------------------------------------------------- jeh@FreeBSD.org http://www.FreeBSD.org The Power to Serve jim@TheHousleys.Net http://www.TheHousleys.net --------------------------------------------------------------------- A: Yes. | Q: Are you sure? | | A: Because it reverses the logical flow of conversation. | | | Q: Why is top posting frowned upon? ------------------------------------------------------------------------- This SF.net 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. http://sourceforge.net/powerbar/db2/ _______________________________________________ libssh2-devel mailing list libssh2-devel_at_lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libssh2-develReceived on 2007-04-22