推荐的在多通道应用程序中读取数据的方法

时间:2013-02-02 16:54:21

标签: libssh2

使用libssh2实现“从最初有哪个频道读取数据”原语的推荐方法是什么? 例如。我有一个简单的双标签终端程序,其中每个标签对应一个LIBSSH2频道。我想等到2个频道中的任何一个获取数据然后打印出来。

单通道示例以非阻塞方式使用libssh2_channel_read(),如下所示:

while(not done) {
    1.  Try reading with libssh2_channel_read()
    2.  If returned LIBSSH2_ERROR_EAGAIN, wait with select()
}

将此扩展到双通道案例的简单方法是:

while(not done) {
    1.  Try reading channel 1
    2.  Try reading channel 2
    3.  If BOTH channels returned LIBSSH2_ERROR_EAGAIN, wait with select()
}

当读取通道2之前带有通道1数据的数据包到达时,这会导致一个罕见的错误。然后两个调用都返回LIBSSH2_ERROR_EAGAIN,但是当尝试读取通道2实际上recv()时,通道1的数据,select()现在将挂起。

我目前使用的解决方法涉及保留套接字的原始数据计数器并使用它们来确定libssh2是否消耗了任何新数据,但我感觉为一个相当简单的问题制作了一个非常复杂的解决方法。我错过了什么吗? 是否存在某种libssh2_session_read_any_channel()?

0 个答案:

没有答案