免费注册 查看新帖 |

Chinaunix

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

[C] 请教大家关于libssh2库开发时的一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-04 10:15 |只看该作者 |倒序浏览
大家好:
     小弟初来乍到,请教大家一个开发时遇到的问题

     最近在学习使用libssh2,但是现在出现一个问题,就是和服务器端进行交互时,发出一个命令到对端,接收其返回时我使用如下方式:
        rc = 1;
                /*读出通道里的buf(可能需要多次读取),并将其打印出来*/
                while (rc > 0)
                {
                        rc = libssh2_channel_read(channel,buf,1023);
                        fprintf(stderr,"%s\n",buf);
                        memset(buf,0,1024);
                }
                /*fprintf(stderr,"Did I do read the buf? %d\n",rc);*/
        
此问题的关键在于 rc = libssh2_channel_read(channel,buf,1023); 函数不返回(测试现象显示)。想请教大家有没有什么办法可以通过超时控制或者通过检测channel中有无数据来解决此问题。 多谢 多谢。{:3_200:}

论坛徽章:
0
2 [报告]
发表于 2010-05-05 10:56 |只看该作者
libssh2_channel_read 不返回 的原因是阻塞吧

不了解ssh2库

但是肯定有非阻塞版本

就有select和超时了

论坛徽章:
0
3 [报告]
发表于 2010-05-05 15:59 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2010-05-06 17:38 |只看该作者
libssh2_channel_read 不返回 的原因是阻塞吧

不了解ssh2库

但是肯定有非阻塞版本

就有select和超 ...
liangzhishao 发表于 2010-05-05 10:56



    二楼说的很对,确实是由于阻塞造成的,但是我试了很多办法,始终无法解决这个问题,类似于socket中的select 函数也没有找到。希望牛人帮忙呀

论坛徽章:
0
5 [报告]
发表于 2010-05-06 18:11 |只看该作者
  1. libssh2_channel_set_blocking(LIBSSH2_CHANNEL *channel, int blocking)
复制代码

论坛徽章:
0
6 [报告]
发表于 2010-05-07 08:44 |只看该作者
ubuntuer 发表于 2010-05-06 18:11

楼上提供的这种方法试过,效果不佳....

论坛徽章:
0
7 [报告]
发表于 2010-05-07 11:20 |只看该作者
二楼说的很对,确实是由于阻塞造成的,但是我试了很多办法,始终无法解决这个问题,类似于socket中的 ...
baidu9833 发表于 2010-05-06 17:38



     设置非阻塞需要操作描述符,ssize_t libssh2_channel_read 默认从  0  读取数据

    可以打开一个新的文件,设置成非阻塞, 让ssize_t libssh2_channel_read 从中读取数据,感觉可以。

    对了,好奇的问一下,你为什么要这么做呢?  ssh就是与用户交互的嘛, 阻塞才自然呀

论坛徽章:
0
8 [报告]
发表于 2010-05-10 08:35 |只看该作者
设置非阻塞需要操作描述符,ssize_t libssh2_channel_read 默认从  0  读取数据

    可以打开 ...
liangzhishao 发表于 2010-05-07 11:20



    阻塞是自然的,可是由于程序需要将收到的信息进行处理,所以这里阻塞后,无法确定信息的边界
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP