[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: Nikolay <nitro@xxxxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Wed, 2 Aug 2017 16:36:40 +0200
- To: libssh@xxxxxxxxxx
Hi Aris,Sorry, may be I'm wrong with this patch and didn't quite understand the purpose of this function.
But I'm currently encountering a problem when working with libssh in async non-blocking mode.
I have multiple ssh connections and I do polling in the following way:
while (1) {
// adding ssh session sockets to eventloop
// with events taken from ssh_get_poll_flags()
// also operating with my other sockets here
ssh_event_dopoll(eventloop, timeout)
// removing ssh session sockets from eventloop
}
In ssh socket event callback:
if (revents != 0) {
if (!session_connected_and_authorized) {
call_ssh_connect_or_auth_again();
} else {
ssh_channel_select(session channels for read, write and except);
// open/exec/close on channels of this session
}
}
The problem is that when I close the last channel in session,
ssh_channel_close() sends a packet with ssh_socket_unbuffered_write()
and enabled POLLOUT on this session socket.
Then my program gets stuck in socket event callback getting POLLOUT over
and over again.
Because the session have no channels now, ssh_channel_exec() doesn't do
anything with session socket and it keeps receiving POLLOUT event.
May be you know any hint how to avoid this? Except creating a dummy
channel :-)
Or may be I'm doing it all wrong? Thank you in advance! Best regards, Nikolay Karikh.
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
Attachment:
smime.p7s
Description: Криптографическая подпись S/MIME
| Re: [PATCH] socket: do not enable POLLOUT for empty out buffer | Aris Adamantiadis <aris@xxxxxxxxxxxx> |
| [PATCH] socket: do not enable POLLOUT for empty out buffer | Nikolay <nitro@xxxxxxxxxxx> |
| Re: [PATCH] socket: do not enable POLLOUT for empty out buffer | Aris Adamantiadis <aris@xxxxxxxxxxxx> |