[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: sftp_write waits infinitely
[Thread Prev] | [Thread Next]
- Subject: Re: sftp_write waits infinitely
- From: Chris Misir <camisir@xxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Mon, 21 Mar 2016 14:00:15 -0400
- To: libssh@xxxxxxxxxx
Hey Guys,
How do I unsubsribe to these emails?
Thanks!
-Chris
On Mon, Mar 21, 2016 at 1:59 PM, Andreas Schneider <asn@xxxxxxxxxxxxxx>
wrote:
> On Thursday 18 February 2016 12:09:38 Jakob Kohl | nowcast GmbH wrote:
> > Hello Andreas,
> >
> > I just tried with the current master from git -> same problem. Program
> will
> > hang infinitely in poll function, when network cable gets unplugged for
> > some minutes. It will still hang, when network cable is plugged again.
> >
> > Then I changed some code parts, so that the poll function is called with
> the
> > user timeout and the ssh_poll function returns -1 if it runs into the
> > timeout. Now when I unplug the target machine during a long running sftp
> > file upload, the upload fails. My code then tries to reconnect the ssh
> > session, that also fails as long as the cable is unplugged. When plugging
> > the cable the connection is established and file transfer starts again.
> > Just like I would expect.
> >
> > Could you (or some other libssh developer) please check my diff: Are
> there
> > any side-effects of my change? Why is ssh_handle_packets_termination
> always
> > called with SSH_TIMEOUT_DEFAULT in the current git master?
>
> Hi Jakob,
>
> I think the patch looks ok, just needs some cleanup. Aris what do you
> think?
>
>
> -- andreas
>
> > Thanks in advance!
> >
> > Jakob Kohl
> >
> >
> >
> > My diff:
> > diff --git a/src/channels.c b/src/channels.c
> > index ffcb1d5..c0ca4ca 100644
> > --- a/src/channels.c
> > +++ b/src/channels.c
> > @@ -2617,7 +2617,7 @@ static int ssh_channel_read_termination(void *s){
> > */
> > int ssh_channel_read(ssh_channel channel, void *dest, uint32_t count,
> int
> > is_stderr) {
> > - return ssh_channel_read_timeout(channel, dest, count, is_stderr,
> -1);
> > + return ssh_channel_read_timeout(channel, dest, count, is_stderr,
> > SSH_TIMEOUT_USER); }
> >
> > /**
> > @@ -2697,9 +2697,9 @@ int ssh_channel_read_timeout(ssh_channel channel,
> > ctx.buffer = stdbuf;
> > ctx.count = 1;
> >
> > - if (timeout < 0) {
> > - timeout = SSH_TIMEOUT_DEFAULT;
> > - }
> > +// if (timeout < 0) {
> > +// timeout = SSH_TIMEOUT_DEFAULT;
> > +// }
> >
> > rc = ssh_handle_packets_termination(session,
> > timeout,
> > diff --git a/src/poll.c b/src/poll.c
> > index 807b0a5..2266fe9 100644
> > --- a/src/poll.c
> > +++ b/src/poll.c
> > @@ -95,7 +95,10 @@ void ssh_poll_cleanup(void) {
> > }
> >
> > int ssh_poll(ssh_pollfd_t *fds, nfds_t nfds, int timeout) {
> > - return poll((struct pollfd *) fds, nfds, timeout);
> > + int rc = poll((struct pollfd *) fds, nfds, timeout);
> > + if (rc <= 0)
> > + return -1;
> > + return rc;
> > }
> >
> > #else /* HAVE_POLL */
>
> --
> Andreas Schneider GPG-ID: CC014E3D
> www.cryptomilk.org asn@xxxxxxxxxxxxxx
>
>
| Re: sftp_write waits infinitely | Andreas Schneider <asn@xxxxxxxxxxxxxx> |