1

Web サービスを呼び出すクライアント gsoap プログラムを実装した C クライアントに問題があります。

Windows PC ではすべて正常に動作しますが、Linux ベースの POS デバイスでコードを発行すると、次のエラーが表示されます。

"setsockopt SO_SNDBUF failed in tcp_connect()"

このエラーのデバッグはどこから始めるべきですか? 原因は何ですか?

返されるエラー番号は 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

とてもシンプルなものになりました!!

Linux専用のバイナリを使用してc/c++ファイルをビルドする必要がありました....

gsoap(wsdl2h,soapcpp2)

Windowsビルドはwinsockを使用し、Linuxビルドは標準ソケットを使用し、2つのシステムのソケットは異なります!

それが私がソケットエラーを受け取っていた理由です。

このソケットエラーメッセージを取得して、これが他の人に役立つことを願っています..

于 2013-03-29T16:38:16.333 に答える
0

len議論はどれくらい大きいですか?値が Windows では機能する可能性がありますが、Linux では何らかの理由で拒否されます。送信された実際の値を見て、それらが適切に見えるかどうかを確認してください。

また、ソケットをセットアップし、setsockopt() への呼び出しを複製しようとする非常に小さなプログラムにこれを縮小してみて、メイン プログラムが使用しようとしている SO_SNDBUF サイズでまだ失敗するかどうかを確認することもできます。

于 2013-03-29T16:27:40.940 に答える