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



我正在使用poco库访问yocto Linux上的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++ 指针黑客设置内部 _timeout 变量,那就没有运气了。似乎与 FTP 超时无关。

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

1 __libc_connect connect.c 26 0xffffbe68bb8c 
2 ??                          0xffffbf1b1ab0 
3 ??  

(连接.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
}

提前感谢您的帮助。 此致敬意

亚历克斯

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

QTcpSocket socket;
socket.connectToHost("xxx.xxx.xxx.198",21);
bool bConnected = socket.waitForConnected(10*1000); //ms

相关内容

最新更新