Código
if(listen(ListenSocket, BACKLOG) == SOCKET_ERROR) { closesocket(ListenSocket); WSACleanup(); return 1; } while(entrar) {//Entrar es true solo se cambia por otro segmento del codigo en caso de que queramos finalizar con el hilo principal b = sizeof(struct sockaddr_in); client = accept(ListenSocket,(SOCKADDR *) service,&b); if(client == INVALID_SOCKET) { } memcpy(toThread,&client,sizeof(SOCKET));// Copiamos la variable socket principal para pasarla al thread hThread = CreateThread( NULL, // default security attributes 0, // use default stack size client_funtion, // thread function name toThread, // argument to thread function 0, // use default creation flags &dwThreadId); // returns the thread identifier if(hThread == NULL) { } } closesocket(ListenSocket);
hay que tener en cuenta que necesitasmos una funcion para el Thread:
Código
DWORD WINAPI client_funtion( LPVOID lpParam ) { //Variables // aqui recivir datos y procesarlos, se puede llamar a otras funciones que sean Thread safe }
Si no queremos que el hilo principal se "preocupe" por cerrar estas conexiones y terminar con el hilo podemos poner lo siguiente:
Código
DWORD WINAPI client_funtion( LPVOID lpParam ) { HANDLE thread_id; thread_id = GetCurrentThread(); //Otras variables //codigo aque para procesar al cliente correctamente CloseHandle(thread_id); //Terminamos con nuestro propio Thread }
Me base en el ejemplo puesto aqui:
http://foro.elhacker.net/programacion_cc/createthread_o_createprocess-t458039.0.html
Saludos