int escucharACPU(t_log * logger) { int retorno; int fdMemoria = newSocket(); asociarSocket(fdMemoria,vg_puerto_escucha); escucharSocket(fdMemoria,1); int fdCPU = aceptarConexionSocket(fdMemoria); // Veo si quien se conecta es CPU (quien deberia conectarse). void * login = malloc(sizeof(char) * 4); recibirPorSocket(fdCPU, login, 4); int coincide = strcmp((char *) login, "CPU"); free(login); if(coincide != 0) { perror("[ERROR] Se espera conexión del proceso CPU\n"); int respuesta = 0; enviarPorSocket(fdCPU,&respuesta,sizeof(int)); cerrarSocket(fdCPU); retorno = 0; } else { printf("[OK] Conexión entre Memoria y CPU establecida mediante el puerto: %d\n",vg_puerto_escucha); log_info(logger,"Conexión Memoria - CPU establecida mediante el puerto: %d\n",vg_puerto_escucha); int respuesta = 1; enviarPorSocket(fdCPU,&respuesta,sizeof(int)); retorno = fdCPU; } return retorno; }
void escucharUMC() { int sockServidor; sockServidor = nuevoSocket(); asociarSocket(sockServidor, config->puerto); escucharSocket(sockServidor, 1); int ret_handshake = 0; while(ret_handshake == 0) { // Mientras que el cliente adecuado no se conecte sockUMC = aceptarConexionSocket(sockServidor); if ( validar_conexion(sockUMC, 0) == FALSE ) continue; else ret_handshake = handshake_servidor(sockUMC, "S"); } int head; while(TRUE) { void *mensaje = aplicar_protocolo_recibir(sockUMC, &head); if(mensaje == NULL) { log_info(logger, "UMC se ha desconectado."); cerrarSocket(sockUMC); cerrarSocket(sockServidor); log_info(logger, "Swap ha salido del sistema."); return; } void (*funcion)(void*) = elegirFuncion(head); // elijo función a ejecutar según protocolo if(funcion == NULL) continue; funcion(mensaje); // ejecuto función funcion = NULL; } cerrarSocket(sockUMC); cerrarSocket(sockServidor); log_info(logger, "Swap ha salido del sistema."); }