gSOAP ** не ** закрывает сокеты? - PullRequest
2 голосов
/ 08 октября 2010

У меня проблема с gSoap - он не закрывает сокет. Вот ситуация: приложение работает нормально, но когда я вызываю функцию «reload», оно не может восстановить соединение. Вот фрагмент кода:

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 должен работать. И интересно то, что не происходит каждый раз.

Это очень странно .. и срочно: /

Заранее большое спасибо

РЕДАКТИРОВАТЬ Проблема решена. Большое спасибо Duck!

1 Ответ

2 голосов
/ 07 декабря 2010

Вы должны точно узнать, какая ошибка выдается.

Возможно, вы получаете сообщение об ошибке «Адрес уже используется» от bind (). Вы можете попытаться исправить это, используя setsockopt () - или эквивалентный вызов soap - с параметром SO_REUSEADDR.

Эта ссылка дает краткое объяснение.

...