我有一個gSoap的問題 - 它沒有關閉插座..這裏的情況是:應用程序工作正常,但當我打電話「重新加載」功能時,它不能重新連接..這是一段代碼: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應該可以工作。有趣的是,這不是而是每次都會發生。
這是非常奇怪..和緊迫:/
在此先感謝了很多
編輯的問題就解決了。非常感謝Duck!
它正在拋出什麼錯誤?看起來好像你可以使用soap.errnum和soap_print_fault()來查找。你事先關閉了套接字嗎?你沒有使用SO_REUSEADDR並重新啓動太快? – Duck 2010-10-08 17:44:20
嗨,我之前在這裏寫過,但是發生了一些事情,可能是因爲該網站已經關閉..無論如何..非常感謝!這工作!我添加了SO_REUSEADDR,一切正常..這是一個虛假的錯誤,但我根本不熟悉這個gSoap庫..只能修復應用程序中的錯誤,從其他人那裏寫出來......很難修復這樣的錯誤立即出現問題,當你沒有時間閱讀任何這樣的第三方圖書館的東西。非常感謝你的幫助! – 2010-10-09 20:06:18
我試過soap_print_fault,它'說'只是無法重新打開套接字。這位撰寫此應用程序的開發人員已將「等待(1);」在soap_done之後,但它根本不夠。而且該應用程序每秒處理大約500-800個請求,所以我不能再設置更長的等待時間。所以,我的意思是,問題真的在那個時候,因爲如果我等待,比方說,30秒,套接字已成功重新打開。無論如何,再次感謝您的幫助! – 2010-10-09 20:11:06