Hi,

I have created a multi threaded socket server. But it is not behaving like one..

See the following code

Code:
/*Creating a Mutex*/
hSocketMutex = CreateMutex( NULL, FALSE, "SocketMutex" );
	printf("%s: waiting for data on port TCP %u\n",module,SERVER_PORT);
	for(;;) 
	{
		cliLen = sizeof(sdstruct.cliAddr);	
		sdstruct.newSd = accept(sdstruct.sd, (struct sockaddr *) &sdstruct.cliAddr, &cliLen);
		if(sdstruct.newSd<0) 
		{
			perror("cannot accept connection ");
			return 0;
		}			
/*Once a client requests I pass that socket structure to the Thread function which will handle that client request*/

		hSock = CreateThread (NULL, 0,AcceptConnection, (LPVOID)&sdstruct, 0, &dwThreadId);
	}
In the thread function..

Code:
DWORD WINAPI AcceptConnection(LPVOID lsock)
{
	DWORD iRetVal;
	SOCKET_STRUCT psock;
	hSocketMutex= OpenMutex( SYNCHRONIZE, FALSE, "SocketMutex" );
	iRetVal = WaitForSingleObject(hSocketMutex, INFINITE );
	if( iRetVal == WAIT_FAILED )
	{
		printf("WAIT_FAILED\n");
		return 0;
	}
	else if( iRetVal == WAIT_TIMEOUT )
	{
		printf("WAIT_TIMEOUT\n");
		return 0;
	}
	else if( iRetVal == WAIT_OBJECT_0 )
	{
		printf("WAIT_OBJECT_0\n");
	}
	psock = (SOCKET_STRUCT)lsock;
	memset(args,0,COM_ARGS);
	if(GetParams(args,psock.newSd)>0) 
	{
		strcpy(com_dat,args);
		printf("%d\n",psock.newSd);
		printf("%s: received from %s:TCP%d : %s\n\n", module,inet_ntoa(sdstruct.cliAddr.sin_addr),ntohs(sdstruct.cliAddr.sin_port), args);
		memset(args,0,COM_ARGS);    
		ProcessData(psock.newSd);
	}
	/*else
	{
		printf("Command not received\n");
	}*/
	ReleaseMutex(hSocketMutex);
	CloseHandle(hSocketMutex);
	return 1;
}
Since I am using a Mutex though the client requested is accepted, it is served after the previous thread releases the Mutex.

All I want to know is how to overcome this.

If I dont create the mutex lock then there will be a clash of local/global variables..

Please let me know If there is a better method.

Thanks,
Pradeep