Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "../compumundo.c"
- #include <pthread.h>
- #define PARAMETROS {"PUERTO","MARCOS","MARCO_SIZE","ENTRADAS_CACHE","CACHE_X_PROC","REEMPLAZO_CACHE","RETARDO_MEMORIA"}
- // ESTRUCTURAS DE SOCKET
- int addrLen; // Variable para guardar un sizeof de estructura
- struct sockaddr_in direccionCliente; // Direccion de clientes genericos
- int SCKTNuevo; // Variable para descriptor de fichero nuevo
- typedef struct asd {
- int socket;
- struct asd * siguiente;
- } nodoSocket;
- nodoSocket * listaSockets = NULL;
- // Inserta un socket en la lista de sockets, y si no existe, la crea
- nodoSocket * insertarSocket(nodoSocket * lista, int SCKTNuevo){
- nodoSocket * puntero;
- nodoSocket * nodoNuevo = (nodoSocket *) malloc(sizeof(nodoSocket));
- if (lista == NULL){
- nodoSocket * listaNueva = (nodoSocket *) malloc(sizeof(nodoSocket));
- listaNueva->socket = SCKTNuevo;
- listaNueva->siguiente = NULL;
- return listaNueva;
- } else {
- puntero = lista;
- while(puntero->siguiente != NULL){
- puntero = puntero->siguiente;
- }
- nodoNuevo->socket = SCKTNuevo;
- nodoNuevo->siguiente = NULL;
- puntero->siguiente = nodoNuevo;
- return lista;
- }
- }
- // Recorre una lista de sockets
- void imprimirSockets(nodoSocket * lista){
- nodoSocket * p = lista;
- while((p->siguiente) != NULL){
- printf("%d", (p->socket));
- p = p->siguiente;
- }
- printf("%d", (p->socket));
- }
- void * crearConexion(int SCKTListener){
- if((SCKTNuevo = accept(SCKTListener, (void *) &direccionCliente, &addrLen)) == -1){
- printf("Error: Fallo el accept() \n");
- }
- printf("%d \n", SCKTNuevo);
- listaSockets = insertarSocket(listaSockets, SCKTNuevo);
- imprimirSockets(listaSockets);
- }
- // Funcion main pide: Archivo de configuracion .ini
- int main(int argc, char **argv) {
- // Variable que se usa para absorber el codigo de error de una funcion
- int codigo;
- // Compruebo que no falten argumentos del main
- if(argc != 2){
- codigo = -10;
- printf("Error con los parametros. \n"
- "Sintaxis: archivo.out 'path de archivo de configuracion' \n");
- return codigo;
- }
- // Identifico y separo los argumentos del main
- char * path = argv[1];
- // Compruebo existencia del archivo de configuracion en el path
- codigo = existeArchivo(path);
- if(codigo == -11){
- printf("El archivo de configuracion no existe. \n");
- return codigo;
- }
- // Crep un puntero a archivo de configuracion
- t_config * configuracion = config_create(path);
- //Imprimo los valores de la configuracion
- char * parametros[] = PARAMETROS;
- codigo = imprimirConfiguracion(configuracion,parametros,sizeof(parametros)/sizeof(parametros[0]));
- switch (codigo){
- case -12:
- printf("Error en la cantidad de parámetros en el archivo de configuración. \n");
- break;
- case -13:
- printf("Parametro definido en archivo de configuración inexistente. \n");
- break;
- }
- // ESTRUCTURAS Y FUNCIONES DE SOCKETS -------------------------------------------------------
- struct sockaddr_in direccionServidor; // Direccion de Memoria como servidor
- int SCKTListener = socket(AF_INET,SOCK_STREAM,0); // Socket Listener
- direccionServidor.sin_family = AF_INET;
- direccionServidor.sin_addr.s_addr = INADDR_ANY;
- direccionServidor.sin_port = htons(config_get_int_value(configuracion,"PUERTO"));
- int yes = 1; // Variable para setsockopt
- int cantBytes; // Variable que guarda cantidad de bytes recibidos por mensaje
- char bufferMsgRec[MAXSIZEMSG]; // Buffer de carga de mensaje recibido
- char bufferMsgSend[MAXSIZEMSG]; // Buffer de carga de mensaje a enviar
- // Reinicia el puerto
- if(setsockopt(SCKTListener, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1){
- printf("Error: Fallo el setsockopt() \n");
- return -21;
- }
- // Bindeo a el puerto
- if(bind(SCKTListener,(void*) &direccionServidor, sizeof(direccionServidor)) == -1){
- printf("Error: Fallo el bind() \n");
- return -14;
- }
- // Pongo al socket a escuchar conexiones
- // CANTCLIENTES: Cantidad maxima de clientes (definido en compumundo.c)
- if (listen(SCKTListener,CANTCLIENTES) == -1) {
- printf("Error: Fallo el listen() \n");
- return -15;
- }
- pthread_t hiloConexion;
- int paramConexion = SCKTListener;
- while(1){
- pthread_create(&hiloConexion, NULL, (void *) crearConexion, (void *) paramConexion);
- pthread_join(hiloConexion,NULL);
- }
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement