我正在编写一个程序,它有两个绑定到两个不同端口的套接字。我创建了另一个程序的对象,该对象位于一个单独的文件中(它还有一个已初始化的套接字并绑定到一个单独的端口)。我得到一个运行时异常,当我尝试打印 WSAGetLastError 时,它返回了错误代码:10093。
我想知道的是,我如何使用 WSAStartup() 和 WSACleanup()。我是否需要为每个套接字调用 WSAStartup() 并调用 WSACleanup() 三次。
有人可以帮我克服这个问题。提前致谢..:-)
我正在编写一个程序,它有两个绑定到两个不同端口的套接字。我创建了另一个程序的对象,该对象位于一个单独的文件中(它还有一个已初始化的套接字并绑定到一个单独的端口)。我得到一个运行时异常,当我尝试打印 WSAGetLastError 时,它返回了错误代码:10093。
我想知道的是,我如何使用 WSAStartup() 和 WSACleanup()。我是否需要为每个套接字调用 WSAStartup() 并调用 WSACleanup() 三次。
有人可以帮我克服这个问题。提前致谢..:-)
您应该在每个程序的基础上调用WSAStartup()
/ WSACleanup()
,即每个程序一次。
当您使用 winsock dll 时,您只需要调用 WSAStartup 一次(在您的地址空间\进程中),并在完成使用套接字时调用 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.
}
};