2013-03-29 1 views
1

웹 서비스를 호출하는 클라이언트 gsoap 프로그램을 구현 한 C 클라이언트에 문제가 있습니다."setsockopt SO_SNDBUF가 tcp_connect()에 실패했습니다"

모든 Windows PC에서 잘 작동하지만 내가 리눅스 기반 POS 장치에 내 코드를 게시 할 때, 나는 다음과 같은 오류가 나타납니다 무엇을 할 수,

"setsockopt SO_SNDBUF failed in tcp_connect()" 

난이 오류를 디버깅하기 시작한다 원인이 되겠습니까? (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

제목은 독자적인 발명 오류 메시지로 구성됩니다. 그러므로 여기서 제목으로 쓸모 없다. 또한 오류 메시지로 쓸모 없습니다. 'errno'가 뭐니? 시스템 오류가 발생하면 자신의 메시지를 자신에게 말하는 것이 도움이되지 않습니다. 시스템의 * 오류를 스스로에게 설명하십시오. – EJP

+0

그것은 매우 단순한 것으로 밝혀졌습니다! 난 그냥 리눅스 전용 바이너리를 사용하여 c/C++ 파일을 만들어야했다 .... gsoap (wsdl2h, soapcpp2) –

답변

0

글쎄 아주 단순한 것으로 판명되었습니다 !!

난 그냥 창문을 구축

은 윈속을 사용하고 리눅스 빌드를 사용합니다 ....

gsoap (wsdl2h, soapcpp2)를 리눅스 전용 바이너리를 사용하여 C/C++ 파일을 구축했다 표준 소켓 및 2 시스템의 소켓은 다릅니다!

왜 소켓 오류가 발생했는지.

희망이 도움이 다른 사람들은이 소켓 오류 메시지를 받고 있습니다.

0

len 인수가 얼마나 큰 :

반환 errornum 2

오류를 생성하는 코드 섹션입니까? 이 값은 Windows에서 작동 할 수도 있지만 Linux에서 거부됩니다. 제출되는 실제 값을 살펴보고 합리적인지 확인하십시오.

소켓을 설정하고 setsockopt() 호출을 복제하려고 시도하고 주 프로그램이 사용하려고 시도하는 SO_SNDBUF 크기로 여전히 실패하는지 확인하려고 시도 할 수 있습니다.

+0

일반적으로이 변수는 soap_buf와 같습니다. length = 65535 bytes int len ​​= SOAP_BUFLEN; 더 작은 값을 사용하려고합니다. 나는 setsockopt와 getsockopt를 테스트하는 작은 프로그램을 시도했다. –

관련 문제