On Fri, 2007-01-26 at 12:40 +0100, Daniel Stenberg wrote:
> 2 - for LOTS of functions we need to change the prototypes to allow them to
>      return a "EAGAIN" error code (instead of blocking) until they are done 
> and
>      can return ok. A few examples are libssh2_sftp_init(),
>      libssh2_sftp_open(), libssh2_scp_recv(). I would really appreciate some
>      input on how to proceed on that. I figure we should make them all return
>      an 'int' and have them get handles passed back in a pointer pointer
>      argument. Or does anyone have any other thoughts on this?

How about an approach that won't require changing the API?  E.g., right
now we have blocking functions:

LIBSSH2_API LIBSSH2_SFTP *libssh2_sftp_init(LIBSSH2_SESSION *session)
LIBSSH2_API LIBSSH2_SFTP_HANDLE *libssh2_sftp_open_ex(LIBSSH2_SFTP
*sftp, ...)
...

You could write a non-blocking version of those functions and calling
them:

int libssh2_async_sftp_init(..., LIBSSH2_SFTP **sftp)
int libssh2_async_sftp_open(..., LIBSSH2_SFTP_HANDLE *sftph)
...

Alternatively, if ssh only support one concurrent sftp session, the
LIBSSH2_SFTP_HANDLE could be stored inside the LIBSSH2_SESSION object,
but I assume this isn't the case.

Of course, change the names to something more appropriate if you want.
Perhaps 'libssh2_sftp_init_nb' and 'libssh2_sftp_open_nb' etc?

Then the blocking versions can be implemented using the non-blocking
functions, roughly as follows:

LIBSSH2_API LIBSSH2_SFTP *libssh2_sftp_init(LIBSSH2_SESSION *session)
{
  int ret;
  LIBSSH2_SFTP *sftph;
  do {
    ret = libssh2_async_sftp_init (session, &sftph);
  } while (ret == EAGAIN);
  return sftph;
}

And so on.

I'm not familiar with the libssh2 API or what the non-blocking
requirements really are, so these are just my generic API design
thoughts.

/Simon


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
libssh2-devel mailing list
libssh2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libssh2-devel

Reply via email to