On 11.04.2018 18:09, g4-l...@tonarchiv.ch wrote:
> On 11.04.2018 17:31, Andreas Schneider wrote:
>> ould appreciate a lot if someone could show me some sample code.
>> I think that ssh_event_dopoll() will handle it and call the appropriate 
>> callback. Don't use ssh_select()
>>
>> In master we have the new connector API which is easier to use, see
>> https://git.libssh.org/projects/libssh.git/tree/examples/ssh_client.c
>>
> Thanks, I think that's the issue: The main event polling is not called
> why my code waits for a connection. But how do I get the event to which
> are attached the default handlers of libssh?
>
> I also looked at the sample code which uses the event API for polling on
> the channel. But this would not solve my issue with global keep-alive
> requests. They are sent while no channel exists. IMHO it's an issue with
> handling messages in the main loop while no channels are open.
Well, maybe I should ask it this way:

How can I keep the internal main loop running, i.e. the default
callbacks being triggered, when nothing else is going on?
What I needed is some ssh_handleMessages() function which I could call
in the listening TCP socket select loop.

The only way I found to make it work is by sending some dummy message
with ssh_send_ignore():

        while (1) {
            FD_ZERO(&fds);
            FD_SET(listensock, &fds);
            tv.tv_sec = 5;
            tv.tv_usec = 0;
            sout_len = 0;
           
            rc = select(listensock+1, &fds, NULL, NULL, &tv);
            if (-1 == rc && EINTR == errno)
                continue;
            else if (0 < rc) {
                if (FD_ISSET(listensock, &fds)) {
                    forwardsock = accept(listensock, NULL, &sout_len);
                    if (forwardsock < 0) {
                        perror("accept failed");
                        goto shutdown;
                    }
                    else {
                        printf("Local client connected.\n");
                        break;
                    }
                }
            }
            else if (0 > rc) {
                perror("waiting on listening socket");
                goto shutdown;
            }
            printf("Poll.\n");
            ssh_send_ignore(session, "Say hello");
        }

        channel = ssh_channel_new(session);
        ssh_channel_open_forward( ...);

Reply via email to