0

我正在编写一个程序,它有两个绑定到两个不同端口的套​​接字。我创建了另一个程序的对象,该对象位于一个单独的文件中(它还有一个已初始化的套接字并绑定到一个单独的端口)。我得到一个运行时异常,当我尝试打印 WSAGetLastError 时,它返回了错误代码:10093。

我想知道的是,我如何使用 WSAStartup() 和 WSACleanup()。我是否需要为每个套接字调用 WSAStartup() 并调用 WSACleanup() 三次。

有人可以帮我克服这个问题。提前致谢..:-)

4

2 回答 2

3

您应该在每个程序的基础上调用WSAStartup()/ WSACleanup(),即每个程序一次。

于 2012-05-21T10:35:44.440 回答
0

当您使用 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.
    }
};
于 2012-05-21T10:40:11.740 回答