1

我的 C 客户端出现问题,我在其中实现了客户端 gsoap 程序来调用 Web 服务。

在 Windows PC 上一切正常,但是当我在基于 linux 的 POS 设备上发布我的代码时,我收到以下错误:

"setsockopt SO_SNDBUF failed in tcp_connect()"

我应该从哪里开始调试此错误,可能是什么原因?

返回的errornum是2

生成错误的代码部分:(在 stdsoap2.c 中)

 if (setsockopt(sk, SOL_SOCKET, SO_SNDBUF, (char*)&len, sizeof(int))){
    soap->errnum = soap_socket_errno(sk);
    soap_set_sender_error(soap, 
                          tcp_error(soap), 
                         "setsockopt SO_SNDBUF failed in tcp_connect()",
                          SOAP_TCP_ERROR);
    soap->fclosesocket(soap, sk);

#ifdef WITH_IPV6
    freeaddrinfo(ressave);
#endif
    return SOAP_INVALID_SOCKET;
  }
4

2 回答 2

0

len争论有多大?该值可能适用于 Windows,但由于某种原因被 linux 拒绝。查看提交的实际值,看看它们是否合理。

您还可以尝试将其简化为一个非常小的程序,该程序仅设置一个套接字并尝试复制对 setsockopt() 的调用,并查看它是否仍然因主程序尝试使用的 SO_SNDBUF 大小而失败。

于 2013-03-29T16:27:40.940 回答
0

好吧,结果很简单!

我只需要使用专用于 linux 的二进制文件来构建 c/c++ 文件....

gsoap(wsdl2h,soapcpp2)

windows build 使用 winsock 和 linux build 使用标准套接字,两个系统上的套接字是不同的!

这就是我收到套接字错误的原因。

希望这对其他人有所帮助,收到此套接字错误消息。

于 2013-03-29T16:38:16.333 回答