Hi there

I wrote some basic ssh client to forward a port. This involves binding a
local listening socket and waiting for an application to connect. But as
long as there is nothing connected to the local socket, the client is
not reading from or writing to the channel. This seems to be an issue as
soon as a SSH server sends keep alive messages: Because nothing is read
from the client's side of the channel, libssh does not work on the
keepalive messages.

The pseudo code looks like this:

socket = socket(PF_INET,...);
bind(socket);
listen(socket);

while(1) {
    do{ /* nada */ } while(  0 == select(socket,...) );
   
    forwardsock = accept(socket);
    channel = ssh_channel_new(session);
    ssh_channel_open_forward(channel, ...);

    while(1) {
        do{ /* nada */ } while( SSH_EINTR == ssh_select(channel,
channelout,  forwardsock) );

        if (FD_ISSET(forwardsock,...)) { /* read from socket and write
to channel */ }

        if (channelout) { /* read from channel and write to socket */ }

        if (EOF) {break;}
    }
    close(forwardsock);
    ssh_channel_close(channel);
}

Without keepalive messages from the server, all works fine.

How can this issue be solved?

Thanks,
Till



Reply via email to