2

gSoap に問題があります - ソケットを閉じていません。状況は次のとおりです。アプリケーションは正常に動作していますが、「リロード」関数を呼び出すと、再接続できません。コードの一部は次のとおりです。

soap_destroy( &m_soapObj );
soap_end( &m_soapObj );
soap_done(&m_soapObj);

sleep(1);

soap_init(&m_soapObj);

//m_ptrThis should be initialized already
assert( m_ptrThis != NULL );
m_soapObj.user = &m_ptrThis;

m_soapObj.accept_timeout = nAcceptTimeout;
m_ptrThreadPool->SetNumThreads( nNumThreads );  
m_nSocketListener = soap_bind(&m_soapObj, NULL, nPort, nBacklog);
if (!soap_valid_socket(m_nSocketListener))
{
    throw Exception(
    "Cannot start listening on port: %d", nPort );          
}

そしてそれがスローされます..soap_freeを使用しようとすると、新しいSoapオブジェクトを作成せず、再度初期化するだけでプログラムがクラッシュします。SO、soap_done が機能するはずです。そして興味深いのは、これが毎回起こるわけではないということです。

それは非常に奇妙です..そして緊急です:/

事前にどうもありがとう

編集問題は解決しました。ダックに感謝します!

4

1 に答える 1

2

スローされているエラーを正確に把握する必要があります。

bind()から「AddressAlreadyinUse」エラーが発生している可能性があります。これを修正するには、setsockopt()(または同等のsoap呼び出し)とSO_REUSEADDRオプションを使用します。

このリンクは簡潔な説明を提供します。

于 2010-12-07T19:08:44.510 に答える