我正在尝试用C++构建一个可以接受多个客户端的服务器。为此,我构建了一个winsock包装器,并使用boost线程进行每个客户端的通信。
当我尝试接受客户端时,我遇到了一个奇怪的问题。我的循环看起来像这样:
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,这意味着循环中的Accept()停止阻塞,并且由于某种原因无法正确接受。我在网上读到,这个错误是由于没有调用WSAStartup()引起的,但是我在套接字的构造函数中调用了它,并且它在第一次接受时确实接受了。