如何在同一程序中创建多个套接字。

时间:2012-05-21 10:31:46

标签: c++ sockets winsock resource-cleanup

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

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

有人可以帮我解决这个问题。 在此先感谢..: - )

2 个答案:

答案 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.
    }
};