我正在编写一个程序,它有两个套接字连接到两个不同的端口。我创建了另一个程序的对象,它位于一个单独的文件中(它还有一个套接字初始化并绑定到一个单独的端口)。我得到一个运行时异常,当我试图打印WSAGetLastError时,它返回错误的代码:10093。
我想知道的是,我如何使用WSAStartup()和WSACleanup()。我是否需要为每个套接字调用WSAStartup()并调用WSACleanup()三次。
有人可以帮我解决这个问题。 在此先感谢..: - )
答案 0 :(得分:3)
您应该按程序调用{{1}} / WSAStartup()
,即每个程序一次。
答案 1 :(得分:0)
当你使用winsock dll时,你只需要调用WSAStartup一次(在你的address-space \ process中),当你使用完套接字时,你需要调用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.
}
};