Ejemplo n.º 1
0
 /**
  * @brief Run the sevrer.
  * @param async If the server should be run on a seperate thread (default
  *              true)
  */
 void IServer::run(bool async)
 {
   if (async)
     m_thread = boost::thread(&IServer::execServer, this);
   else
     execServer();
 }
Ejemplo n.º 2
0
int main(int argc, char *argv[])
{
	int pidFork;
	int i;
	int S[3], pid;
	socklen_t clilen;
	struct sockaddr_in serv_addr, cli_addr;
	
	signal(SIGCHLD,SIG_IGN);

	for (i=0; i<3; i++)
	{
		S[i] = socket(AF_INET, SOCK_STREAM, 0);
		if (S[i] < 0) 
			error("ERROR opening socket!\n");
		fcntl(S[i], F_SETFL, O_NONBLOCK);
		bzero((char *) &serv_addr, sizeof(serv_addr));
		serv_addr.sin_family = AF_INET;
		serv_addr.sin_addr.s_addr = INADDR_ANY;
		serv_addr.sin_port = htons(PORT1+i);
		if (bind(S[i], (struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) 
			error("ERROR on binding!\n");
		listen(S[i],5);
	}
	clilen = sizeof(cli_addr);

	if ((pidFork = fork()) == 0)
	{
		while(1)
		{		
			int i=0;
			for (i=0; i<3; i++)
			{
				int NS;
				if((NS = accept(S[i], (struct sockaddr *) &cli_addr, &clilen)) >0 )
				{
					pid = fork();
					if (pid < 0)
					error("ERROR on fork");
					if (pid == 0)  
					{
						close(S[i]);
						if (i == 0)
							timeServer(NS);
						if (i == 1)
							fileServer(NS);
						if (i == 2)
							execServer(NS);
						exit(0);
					}else close(NS);
				}


			}

		}				

	}
	
	return (0);
}