int CommunicationServices::start()
{
	int errored = 0, newsock = 0;
    fd_set readfds;
    
	/* check if initialized */
	if ( !mp || !mainSocket )
	{
		logger->error("CommunicationServices not initialized.\n");
		return -1;
	}
	
	/* Repeat until the socket is closed */
    while ( !errored )
    {
         FD_ZERO( &readfds );
         FD_SET( mainSocket, &readfds );
         if ( select(mainSocket+1, &readfds, NULL, NULL, NULL) < 1 )
         {
             /* Complain, explain, and exit */
              char msg[128];
              sprintf( msg, "failure selecting server connection [%.64s]\n",
                       strerror(errno) );
              logger->error( msg );
              errored = 1;
         }
         else
         {
			/* Accept the connect, receive request, and return */
			if ( (newsock = serverAccept(mainSocket)) != -1 )
			{
				Message *msg = new Message;	//mp should free this

				// fill msg with received data from the socket
				if (receiveReq( newsock, msg ) < 0) {
					errored = 1;					
					deallocMsg(msg);	//deallocate when error
				}
				
				if ( !errored ) {
					//pass message to MessageProcessor
					errored = mp->process(msg);
				}			
				
				fflush( stdout );
			}
			else {
				/* Complain, explain, and exit */
				char msg[128];
				sprintf( msg, "failure accepting connection [%.64s]\n", 
					  strerror(errno) );
				logger->error( msg );
				errored = 1;
			}
         }
    }
    
    return 0;
}
Example #2
0
int main(int argc, char *argv[])
{
    ServerArguments arguments;
    
    // Arguments parser.
    if (serverArgumentsCreate(&arguments, argc, argv) == ERROR) {
        return ERROR;
    }
    
    File file;
    if (fileCreate(&file, serverArgumentsFileRoute(&arguments)) == ERROR) {
        return ERROR;
    }
    
    int sesion_id = ONE;
    while (!feof(fileAsociatedFile(&file))) {
        long line_length = fileLineLengthCount(&file);
        char buffer[line_length + ONE];
        fileReadLine(&file, buffer, (int)line_length + ONE);
        Process process;
        processCreate(&process, buffer, sesion_id);
        sesion_id++;
    }
    
    // Create server.
    Server server;
    
    if (serverCreate(&server) == ERROR) {
        return ERROR;
    }
    
    if (serverOpen(&server, serverArgumentsPort(&arguments)) == ERROR) {
        return ERROR;
    }
    
    Socket new_sock = serverAccept(&server);
    if (new_sock.sockfd == ERROR) {
        return ERROR;
    }
    
    if (socketSend(&new_sock, NULL) == ERROR) {
        return ERROR;
    }
    
    serverArgumentsDestroy(&arguments);
    serverDestroy(&server);
    socketDestroy(&new_sock);
    fileDestroy(&file);
    
    return ZERO;
}