我在yocto linux上使用poco库访问ftp服务器(hw是一个微控制器)。如果我指定一个有效的地址(ftp主机),所有工作正常,如果我使用一个不存在的ftp地址,"open“方法挂起129秒!然后,它抛出以下Poco::Exception。
displayText->"N4Poco9ExceptionE"
what->"Exception"
message->""
name->"Exception"
code->"110"
这里的代码..
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。
如果我破坏了调试器,这就是堆栈。
1 __libc_connect connect.c 26 0xffffbe68bb8c
2 ?? 0xffffbf1b1ab0
3 ??
(connect.c)
#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
}
提前感谢您的帮助。诚挚的问候,
亚历克斯
发布于 2020-06-19 08:29:45
如果没有人知道如何使用poco FTPClientSession对象求解,我可以尝试在FTPClientSession::open()之前使用此调用(QT )。
QTcpSocket socket;
socket.connectToHost("xxx.xxx.xxx.198",21);
bool bConnected = socket.waitForConnected(10*1000); //ms
https://stackoverflow.com/questions/62465319
复制相似问题