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; }
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; }