我的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;
}
答案 0 :(得分:0)
len
参数有多大?该值可能在Windows上有效,但由于某种原因被Linux拒绝。看看提交的实际值,看看它们是否合理。
你也可以尝试将其减少到一个非常小的程序,它只是设置一个套接字并尝试复制对setsockopt()的调用,看看它是否仍然以主程序试图使用的SO_SNDBUF大小失败。 / p>
答案 1 :(得分:0)
我只需要使用专用于linux的二进制文件来构建c / c ++文件....
gSOAP的(wsdl2h,soapcpp2)
windows build使用winsock,linux build使用标准套接字 并且2个系统上的插座是不同的!这就是为什么我收到套接字错误。
希望这能帮助别人,得到这个套接字错误信息。