Subject: Re: writing to channel limited to 2 Mb?

Re: writing to channel limited to 2 Mb?

From: Daniel Stenberg <daniel_at_haxx.se>
Date: Thu, 11 Aug 2011 10:23:23 +0200 (CEST)

On Thu, 11 Aug 2011, Henrik Nordström wrote:

> _libssh2_channel_write() clearly do return 0 immedately if the window
> have collapsed after draining the incoming transport.
>
> if(channel->local.window_size <= 0)
> /* there's no room for data so we stop */
> return 0;
>
>
> I guess it should
> a) Block if not non-blocking.
> b) Return EAGAIN if non-blocking and indicate it needs to read from the
> transport (wait for window update)

I agree.

As it calls _libssh2_transport_read() just before that, I'm thinking that
perhaps we should just make a patch like below. It would work because
_libssh2_transport_read() itself stores the correct bits that the app should
wait for after EAGAIN is returned.

diff --git a/src/channel.c b/src/channel.c
index efb2b48..be6a680 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -2022,7 +2022,7 @@ _libssh2_channel_write(LIBSSH2_CHANNEL *channel, int
strea

          if(channel->local.window_size <= 0)
              /* there's no room for data so we stop */
- return 0;
+ return (rc==LIBSSH2_ERROR_EAGAIN?rc:0);

          channel->write_bufwrite = buflen;

-- 
  / daniel.haxx.se

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
Received on 2011-08-11