[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: Andreas Schneider <asn@xxxxxxxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Mon, 21 Mar 2016 18:59:02 +0100
- To: libssh@xxxxxxxxxx, Aris Adamantiadis <aris@xxxxxxxxxxxx>
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 | Chris Misir <camisir@xxxxxxxxx> |