Gsoap error 28 : SOAP_TCP_ERROR

Gsoap error 28 : SOAP_TCP_ERROR

本文关键字:TCP ERROR SOAP error Gsoap      更新时间:2023-10-16

我在Qt应用程序中为Symbian S60第三版FP2使用gsoap。我每5秒钟向WS发出几个请求。2小时后,应用程序无法连接到WS,我从gsoap得到了错误28:SOAP_TCP_Error。如果我停止应用程序并再次启动它,它就能够再次连接到WS。为什么会发生这种情况?

我已经将gsoap WS调用放入for循环中,每次运行它时,它都会在第892次停止连接到WS

作为前期工作,您可以做以下几件事:

  • 在gsoap启用DBGLOG
  • 在客户端使用soap_faildetail

我99%确信它会给你一个tcp连接超时错误,这意味着连接握手刚刚失败。如果是这样,则意味着WS由于某种原因没有接受该连接。问题的根源可能介于proxy/firewall/os/buggy-ws/driver之间,仅举几个例子。因此,可以使用重新连接尝试。我不熟悉symbian,但在windows操作系统中,重新连接是在幕后进行的:

  • 请参阅:https://technet.microsoft.com/en-us/library/cc938209.aspx

默认情况下,会尝试两次重新连接,但此行为可以通过注册表参数、驱动程序或winsock进行更改。

我认为您必须在应用程序级别编写显式连接重试子例程,并强制gSOAP使用它(请参阅gSOAP文档中的hooks部分),或者如果它返回错误,只需调用soap_connect几次。

注意:在gsoap级别引入connection_timeout可能会引起混淆。如果您决定将这个(如果您还没有)放在代码中,请执行一些测试,无论重新连接尝试是否真的在该超时内完成。我想说的是,您的应用程序可以将超时设置为30分钟,但您的操作系统会在最初几秒钟内将SYN数据包放入WS主机几次。如果WS主机由于某种原因不响应SYN-ACK,那么gsoap的tcp_connect子例程将陷入30分钟的时间浪费循环。

相关文章: