Esempio n. 1
0
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;
}