2012-05-21 85 views
0

我正在編寫一個程序,它有兩個有界限的兩個不同的端口。我創建了另一個程序的對象,它在一個單獨的文件中(它也有一個套接字初始化並綁定到一個單獨的端口)。我得到一個運行時異常,當我試圖打印WSAGetLastError它返回錯誤代碼:10093。如何在同一個程序中創建多個套接字。

我想知道的是,我如何使用WSAStartup()和WSACleanup()。我是否需要爲每個套接字調用WSAStartup()並調用WSACleanup()三次。

有人可以幫助我解決這個問題。 在此先感謝.. :-)

+3

如果你在問題中也有你的代碼,這將有所幫助! –

回答

3

您應該根據每個節目調用WSAStartup()/WSACleanup(),即每個節目一次。

+0

謝謝,我已經按照你的建議調用了WSAStartup()和WSACleanup()。但我在這一點上得到相同的錯誤 'IP = inet_ntoa(*(struct in_addr *)* hostEntry-> h_addr_list);' 當我試圖調試時,hostEntry返回null。這裏, 'hostEntry = gethostbyname(hostId);' – rutharanga

+1

呃哦,他說的是C ... – Ashe

+0

@rutharanga如果'gethostbyname'返回NULL,你應該立即檢查'WSAGetLastError'。 –

0

你只需要調用WSAStartup一次(在你的地址空間\進程中),當你使用winsock dll,WSACleanup完成使用套接字時。

我通常做類似的東西實現開機\清理:(這確實是只針對單線程應用程序安全,但使用互斥鎖多線程並不難......)

class HigherLevelSocketWrapper 
{ 
private: 
    static int m_iInstanceCount = 0; 

public: 
    HigherLevelSocketWrapper() 
    { 
     //Check if m_iInstanceCount is 0, if so, call WSAStartup. 
     //increment m_iInstanceCount 
    } 
    virtual ~HigherLevelSocketWrapper() 
    { 
     //decrement m_iInstanceCount 
     //Check if m_iInstanceCount is 0, if so, call WSACleanup. 
    } 
}; 
相關問題