2012-05-21 71 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. 
    } 
}; 
相关问题