我想在C++中构建一个可以接受多个客户端的服务器。为此,我构建了一个winsock包装器,并使用线程和boost来为每个客户进行通信。
我试图接受客户端时遇到了一个奇怪的问题,我有一个看起来像这样的循环。C++ Winsock 10093错误
int clientID = 0;
listenSocket = new Socket(SocketType::TCP);
listenSocket->Bind(port);
listenSocket->Listen();
while(running)
{
Socket *socket = &listenSocket->Accept();
mutex.lock();
clients.push_back(new Client(socket, clientID));
mutex.unlock();
std::cout << "Client with id " << clientID << " connected!" << std::endl;
std::cout << WSAGetLastError() << std::endl;
clientID++;
}
现在,第一个客户接受罚款和WSAGetLastError()返回0,但连接后的第一个,即使我不尝试连接另一只是守在控制台10093,这意味着编写接受()在循环停止阻塞,并由于某种原因不会正确接受。我在网上读到这个错误是由于没有调用WSAStartup()而引起的,但是我在套接字的构造函数中调用了它,并且它在第一次接受了。
是否可能调用WSACleanup某处,如在析构函数中? – 2013-05-10 07:32:34