免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5272 | 回复: 3
打印 上一主题 下一主题

关于libssh2的菜鸟问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-05 11:55 |只看该作者 |倒序浏览
在libssh2中给出的示例中有这样一段代码
waitsocket(int socket_fd, LIBSSH2_SESSION* session)
{
    struct timeval timeout;
    int rc;
    fd_set fd;
    fd_set *writefd = NULL;
    fd_set *readfd = NULL;
    int dir;
    timeout.tv_sec = 10;
    timeout.tv_usec = 0;
    FD_ZERO(&fd);
    FD_SET(socket_fd, &fd);


    dir = libssh2_session_block_directions(session);  

    if(dir & LIBSSH2_SESSION_BLOCK_INBOUND)
        readfd = &fd;

    if(dir & LIBSSH2_SESSION_BLOCK_OUTBOUND)
        writefd = &fd;
    rc = select(socket_fd + 1, readfd, writefd, NULL, &timeout);
    return rc;
}

想请问各位高手如果为什么要使用libssh2_session_block_directions这个函数确定阻塞的方向,如果不使用而直接改为select(socket_fd + 1, &fd, &fd, NULL, &timeout);会出现有什么不好的地方么?

论坛徽章:
0
2 [报告]
发表于 2011-06-05 13:20 |只看该作者
select把对描述符的读写事件监控分开在两个参数里了,前面的libssh2_session_block_directions用以确定该seesion到底是要关注读还是关注写,从而把它加到合适的描述符集里再传给select。
直接改为select有点浪费啊,本来就只关注其中一个类型事件,何必要加到两个里呢。

论坛徽章:
0
3 [报告]
发表于 2011-06-05 14:43 |只看该作者
本帖最后由 wh007007 于 2011-06-05 14:44 编辑

发重复了

论坛徽章:
0
4 [报告]
发表于 2011-06-05 14:44 |只看该作者
回复 2# lenky0401


   
多谢版主解答,再问个问题
用libssh2实现交互式命令,在第一次执行libssh2_channel_exec输入命令后,程序阻塞,需要继续输入,这个时候用哪一个函数呢?
我再用libssh2_channel_exec的话会产生错误LIBSSH2_ERROR_CHANNEL_REQUEST_DENIED
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP