[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] socket: do not enable POLLOUT for empty out buffer
[Thread Prev] | [Thread Next]
- Subject: Re: [PATCH] socket: do not enable POLLOUT for empty out buffer
- From: Aris Adamantiadis <aris@xxxxxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Wed, 2 Aug 2017 16:20:42 +0200
- To: libssh@xxxxxxxxxx
Hi Nikolay, Thanks for your patch. Is there a particular reason it had to be changed? The current behavior of the POLLOUT is to avoid a poll() call when sending a new packet. I think the new behavior will force buffering + return to the main loop + poll() + send() instead of send() + main loop + poll() + main loop again. It can look nasty in debug logs but I think it's better for latency. Aris On 2/08/17 16:12, Nikolay wrote: > Added new condition in ssh_socket_unbuffered_write() so that POLLOUT > event for socket is not to be enabled if the whole buffer has been > successfully written with send()/write(). > > Signed-off-by: Nikolay N. Karikh <nitro@xxxxxxxxxxx> > --- > src/socket.c | 13 ++++++++----- > 1 file changed, 8 insertions(+), 5 deletions(-) > > diff --git a/src/socket.c b/src/socket.c > index 76dc55e..da7c46a 100644 > --- a/src/socket.c > +++ b/src/socket.c > @@ -567,11 +567,14 @@ static int > ssh_socket_unbuffered_write(ssh_socket s, const void *buffer, > #else > s->last_errno = errno; > #endif > - s->write_wontblock = 0; > - /* Reactive the POLLOUT detector in the poll multiplexer system */ > - if(s->poll_out){ > - SSH_LOG(SSH_LOG_PACKET, "Enabling POLLOUT for socket"); > - > ssh_poll_set_events(s->poll_out,ssh_poll_get_events(s->poll_out) | > POLLOUT); > + // only enable POLLOUT if unwritten data left in buffer > + if (w < len) { > + s->write_wontblock = 0; > + /* Reactive the POLLOUT detector in the poll multiplexer system */ > + if(s->poll_out){ > + SSH_LOG(SSH_LOG_PACKET, "Enabling POLLOUT for socket"); > + > ssh_poll_set_events(s->poll_out,ssh_poll_get_events(s->poll_out) | > POLLOUT); > + } > } > if (w < 0) { > s->data_except = 1;
Re: [PATCH] socket: do not enable POLLOUT for empty out buffer | Nikolay <nitro@xxxxxxxxxxx> |
[PATCH] socket: do not enable POLLOUT for empty out buffer | Nikolay <nitro@xxxxxxxxxxx> |