首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果ftp主机不存在,Poco::Net::FTPClientSession在open()方法上挂起129秒

如果ftp主机不存在,Poco::Net::FTPClientSession在open()方法上挂起129秒
EN

Stack Overflow用户
提问于 2020-06-19 15:27:18
回答 1查看 157关注 0票数 0

我在yocto linux上使用poco库访问ftp服务器(hw是一个微控制器)。如果我指定一个有效的地址(ftp主机),所有工作正常,如果我使用一个不存在的ftp地址,"open“方法挂起129秒!然后,它抛出以下Poco::Exception。

代码语言:javascript
运行
复制
displayText->"N4Poco9ExceptionE"
what->"Exception"
message->""
name->"Exception"
code->"110"

这里的代码..

代码语言:javascript
运行
复制
Poco::Net::FTPClientSession ftp;
try
{
    ftp.open(host,port);     <<<<<<<<<  hangs here   
    ftp.login(userName,password);
    ftp.logout();
    ftp.close();
}
catch(Poco::Exception exc)
{
} 

setTimeout()方法只有在调用open()方法之后才起作用(否则它会抛出异常)。但是,如果我使用c++指针hack设置内部_timeout变量,则没有与c++超时相关的luck..seems。

如果我破坏了调试器,这就是堆栈。

代码语言:javascript
运行
复制
1 __libc_connect connect.c 26 0xffffbe68bb8c 
2 ??                          0xffffbf1b1ab0 
3 ??  

(connect.c)

代码语言:javascript
运行
复制
#include <sys/socket.h>
#include <sysdep-cancel.h>
#include <socketcall.h>

int    __libc_connect (int fd, __CONST_SOCKADDR_ARG addr, socklen_t len)
{
#ifdef __ASSUME_CONNECT_SYSCALL
  return SYSCALL_CANCEL (connect, fd, addr.__sockaddr__, len);    <<< THE DEBUGGER BREAKS HERE
#else
  return SOCKETCALL_CANCEL (connect, fd, addr.__sockaddr__, len);
#endif
}

提前感谢您的帮助。诚挚的问候,

亚历克斯

EN

回答 1

Stack Overflow用户

发布于 2020-06-19 16:29:45

如果没有人知道如何使用poco FTPClientSession对象求解,我可以尝试在FTPClientSession::open()之前使用此调用(QT )。

代码语言:javascript
运行
复制
QTcpSocket socket;
socket.connectToHost("xxx.xxx.xxx.198",21);
bool bConnected = socket.waitForConnected(10*1000); //ms
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62465319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档