DWORD WINAPI listen_thread(void * d){ MyServerSocket *that = (MyServerSocket *)d; sockaddr_in client; int size = sizeof(client); while (1){ ZeroMemory(&client, size); if (that->status == socket_ready){ int handle = ::accept(that->_socketHandle,(sockaddr*) &client, &size); if (handle < 0){ int err = WSAGetLastError(); if (err == WSAEWOULDBLOCK){ Sleep(2000); } else{ that->status = socket_err; break; } } else{ that->onAccept(&client, handle); } Sleep(100); } else{ break; } } that->status = socket_err; return NULL; }