我想在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