“在tcp_connect()中setsockopt SO_SNDBUF失败”

时间:2013-03-29 16:19:13

标签: sockets gsoap setsockopt

我的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;
  }

2 个答案:

答案 0 :(得分:0)

len参数有多大?该值可能在Windows上有效,但由于某种原因被Linux拒绝。看看提交的实际值,看看它们是否合理。

你也可以尝试将其减少到一个非常小的程序,它只是设置一个套接字并尝试复制对setsockopt()的调用,看看它是否仍然以主程序试图使用的SO_SNDBUF大小失败。 / p>

答案 1 :(得分:0)

很好,结果很简单!

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

gSOAP的(wsdl2h,soapcpp2)

windows build使用winsock,linux build使用标准套接字 并且2个系统上的插座是不同的!

这就是为什么我收到套接字错误。

希望这能帮助别人,得到这个套接字错误信息。