#include#include#include#include#defineMUTEX_NAME "sschild"intmain(intargc,char*argv[])
{
{//initWORD wVersionRequested;
WSADATA wsaData;
wVersionRequested=MAKEWORD(2,2);
WSAStartup( wVersionRequested,&wsaData );
}
SOCKET s=socket(AF_INET,SOCK_STREAM,0);if(s==INVALID_SOCKET)
{
printf("create socket failed!\n");return-1;
}
{//bind&listensockaddr_in sa;
sa.sin_family=AF_INET;
sa.sin_port=htons(1500);
sa.sin_addr.s_addr=0;intrc=bind(s,(sockaddr*)&sa,sizeof(sa));if(rc==SOCKET_ERROR)
{
printf("bind failed:%d\n",::WSAGetLastError());return-1;
}
listen(s,SOMAXCONN);
}
HANDLE hSocketMutex;
{//create mutexhSocketMutex=::CreateMutex(NULL,FALSE,MUTEX_NAME);if(hSocketMutex==NULL)
{
printf("fail CreateMutex:%d\n",::GetLastError());return-1;
}
}constintCHILD_NUMBER=5;
HANDLE hProcess[CHILD_NUMBER];
{//create child processSTARTUPINFO si={sizeof(si) };
PROCESS_INFORMATION piProcess[CHILD_NUMBER];charpCmdLine[256];
sprintf(pCmdLine,"SSChild %d",s);for(inti=0;i
{if(!CreateProcess(NULL,pCmdLine,NULL,NULL,TRUE,0, NULL, NULL,&si,&piProcess[i]))
{
printf("fail CreateProcess:%d\n",::GetLastError());return-1;
}
hProcess[i]=piProcess[i].hProcess;
CloseHandle(piProcess[i].hThread);
}
}
::WaitForMultipleObjects(CHILD_NUMBER,hProcess,TRUE,INFINITE);
{//close all child handlefor(inti=0;i
{
CloseHandle(hProcess[i]);
}
}//cleanCloseHandle(hSocketMutex);
closesocket(s);
WSACleanup( );return0;
}