Peter, On Wed, Feb 29, 2012 at 7:42 PM, Peter Stuge <pe...@stuge.se> wrote:
> Hi Mitchell, > > Mitchell Hashimoto wrote: > > > > but I was hoping perhaps there was a better way? > > > > > > Sorry not at this time. I think we want callbacks though, so feel > > > free to discuss and send patches. :) > > > > Understood. Thanks. > > > > I haven't been using libssh2 long enough to feel comfortable enough > > in suggesting API improvements, since I haven't quite immersed > > myself in the "libssh2 way." > > There is no such thing.. libssh2 has evolved, and must continue to > evolve. The libssh2 API can and should be expanded to become more > useful, and the definition of useful should basically come from it's > users. > > > > But I agree that callbacks would be fantastic. > > So how would that work? > Haha! I can appreciate that point of view. I suppose now that I think about it, a callback would be somewhat difficult, since the client controls the sockets. So even though ideally in my head libssh2 would tell me when I should read, I understand that is not really feasible. Instead, I believe it would be nice to do something like the following: int libssh2_session_ready_channels(LIBSSH2_SESSION *, LIBSSH2_CHANNEL **) Where this would return a LIBSSH2_ERROR_EAGAIN if the socket would block when nonblocking is on, and the return value would basically behave just like any other libssh2 call. It would return `0` when it was a success. Normal libssh2 behavior. If 0 is returned, then the second parameter is set to a pointer to a single channel that is ready to be read, or NULL if none are ready. This would allow this sort of behavior: int rc = 0; LIBSSH2_CHANNEL *channel = NULL; while ((rc = libssh2_session_ready_channels(sess, &channel)) == 0 && channel != NULL) { // Read from `channel` } Again, like I said, I don't know the internal structure of libssh2 or the feasibility of such a thing, but I can see looping through channels to become overwhelming. What do you think? Best, Mitchell > > > //Peter > _______________________________________________ > libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel >
_______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel