Consulta la documentazione di _beginthread e _endthread sull'MSDN..

invece di
codice:
pid = fork();
if(pid == -1) 
   /*errore*/;
if(pid == 0)
  exit(processa_richiesta(socket));
avrai
codice:
thread = _beginthread(processa_richiesta, 0, socket);
if(thread == -1)
  /*errore*/;
e la processa_richiesta dovrebbe essere del tipo

codice:
void processa_richiesta(void*param)
{
 SOCKET socket = (SOCKET)param;
 /*
 processa la richiesta
 */
 _endthread();
}