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对象,只需再次初始化它。所以,soap_done 应该可以工作。有趣的是,这种情况并非每次都会发生。

这很奇怪..而且很紧急:/

非常感谢提前

编辑问题解决了。非常感谢鸭子!

4

1 回答 1

2

您应该确切地找出引发了什么错误。

您可能会从 bind() 收到“地址已在使用中”错误。您可以尝试通过使用带有 SO_REUSEADDR 选项的 setsockopt() 或等效的 soap 调用来纠正此问题。

这个链接提供了一个简明的解释。

于 2010-12-07T19:08:44.510 回答