From ab7ae0c3477daba731fe65ed50b21d307dc8adf8 Mon Sep 17 00:00:00 2001 From: Santiago Lo Coco Date: Sun, 14 Nov 2021 08:32:52 -0300 Subject: [PATCH] Refactor code and add minor changes to sockets.c Co-authored-by: Ezequiel Bellver Co-authored-by: Juan Barmasch --- include/challengesLib.h | 105 ++++++++++++++++++++++++++++------------ include/sockets.h | 2 +- src/sockets.c | 2 +- 3 files changed, 77 insertions(+), 32 deletions(-) diff --git a/include/challengesLib.h b/include/challengesLib.h index 9f7f5ec..8b69d7d 100644 --- a/include/challengesLib.h +++ b/include/challengesLib.h @@ -6,36 +6,81 @@ #define MAX_CHALLENGES 12 challenge_t challenges[] = { - {"Bienvenidos al TP3 y felicitaciones, ya resolvieron el primer acertijo.\n\n\ -En este TP deberán finalizar el juego que ya comenzaron resolviendo los desafíos \ -de cada nivel.\nAdemás tendrán que investigar otras preguntas para responder \ -durante la defensa.\nEl desafío final consiste en crear un programa que se \ -comporte igual que yo, es decir, que provea los mismos desafíos y que sea necesario \ -hacer lo mismo para resolverlos. No basta con esperar la respuesta.\nAdemás, \ -deberán implementar otro programa para comunicarse conmigo.\n\nDeberán estar atentos \ -a los easter eggs.\n\nPara verificar que sus respuestas tienen el formato correcto \ -respondan a este desafío con la palabra 'entendido\\n'", "¿Cómo descubrieron el protocolo, \ -la dirección y el puerto para conectarse?", "entendido\n", NULL}, - {"The Wire S1E5\n5295 888 6288", "¿Qué diferencias hay entre TCP y UDP y en qué casos \ -conviene usar cada uno?", "itba\n", NULL}, - {"https://ibb.co/tc0Hb6w", "¿El puerto que usaron para conectarse al server es el mismo \ -que usan para mandar las respuestas? ¿Por qué?", "M4GFKZ289aku\n", NULL}, - {"EBADF...", "¿Qué útil abstracción es utilizada para comunicarse con sockets? ¿se puede \ -utilizar read(2) y write(2) para operar?", "fk3wfLCm3QvS\n", writeChallenge}, - {"respuesta = strings:250", "¿Cómo garantiza TCP que los paquetes llegan en orden y no se \ -pierden?", "too_easy\n", NULL}, - {".data .bss .comment ? .shstrtab .symtab .strtab", "Un servidor suele crear un nuevo proceso \ -o thread para atender las conexiones entrantes. ¿Qué conviene más?", ".RUN_ME\n", NULL}, - {"Filter error", "¿Cómo se puede implementar un servidor que atienda muchas conexiones sin usar \ -procesos ni threads?", "K5n2UFfpFMUN\n", filterChallenge}, - {"¿?", "¿Qué aplicaciones se pueden utilizar para ver el tráfico por la red?", - "BUmyYq5XxXGt\n", questionChallenge}, - {"Latexme\n\nSi\n \\mathrm{d}y = u^v{\\cdot}(v'{\\cdot}\\ln{(u)}+v{\\cdot}\\frac{u'}{u})\n\ -entonces\ny = ", "sockets es un mecanismo de IPC. ¿Qué es más eficiente entre sockets y pipes?", - "u^v\n", NULL}, - {"quine", "¿Cuáles son las características del protocolo SCTP?", "chin_chu_lan_cha\n", quineChallenge}, - {"b gdbme y encontrá el valor mágico", "¿Qué es un RFC?", "gdb_rules\n", gdbChallenge}, - {"Me conoces", "¿Fue divertido?", "normal\n", normalChallenge} + { + "Bienvenidos al TP3 y felicitaciones, ya resolvieron el primer acertijo.\n\n" + "En este TP deberán finalizar el juego que ya comenzaron resolviendo los desafíos " + "de cada nivel.\nAdemás tendrán que investigar otras preguntas para responder " + "durante la defensa.\nEl desafío final consiste en crear un programa que se " + "comporte igual que yo, es decir, que provea los mismos desafíos y que sea necesario " + "hacer lo mismo para resolverlos. No basta con esperar la respuesta.\nAdemás, " + "deberán implementar otro programa para comunicarse conmigo.\n\nDeberán estar atentos " + "a los easter eggs.\n\nPara verificar que sus respuestas tienen el formato correcto " + "respondan a este desafío con la palabra 'entendido\\n'", "¿Cómo descubrieron el protocolo, " + "la dirección y el puerto para conectarse?", + "entendido\n", + NULL + }, + { + "The Wire S1E5\n5295 888 6288", "¿Qué diferencias hay entre TCP y UDP y en qué casos " + "conviene usar cada uno?", + "itba\n", + NULL + }, + { + "https://ibb.co/tc0Hb6w", "¿El puerto que usaron para conectarse al server es el mismo " + "que usan para mandar las respuestas? ¿Por qué?", + "M4GFKZ289aku\n", + NULL + }, + { + "EBADF...", "¿Qué útil abstracción es utilizada para comunicarse con sockets? ¿se puede " + "utilizar read(2) y write(2) para operar?", + "fk3wfLCm3QvS\n", + writeChallenge}, + { + "respuesta = strings:250", "¿Cómo garantiza TCP que los paquetes llegan en orden y " + "no se pierden?", + "too_easy\n", + NULL + }, + { + ".data .bss .comment ? .shstrtab .symtab .strtab", "Un servidor suele crear un nuevo proceso " + "o thread para atender las conexiones entrantes. ¿Qué conviene más?", + ".RUN_ME\n", + NULL + }, + { + "Filter error", "¿Cómo se puede implementar un servidor que atienda muchas conexiones sin usar " + "procesos ni threads?", + "K5n2UFfpFMUN\n", + filterChallenge + }, + { + "¿?", "¿Qué aplicaciones se pueden utilizar para ver el tráfico por la red?", + "BUmyYq5XxXGt\n", + questionChallenge + }, + { + "Latexme\n\nSi\n \\mathrm{d}y = u^v{\\cdot}(v'{\\cdot}\\ln{(u)}+v{\\cdot}\\frac{u'}{u})\n" + "entonces\ny = ", "sockets es un mecanismo de IPC. ¿Qué es más eficiente entre sockets y pipes?", + "u^v\n", + NULL + }, + { + "quine", "¿Cuáles son las características del protocolo SCTP?", + "chin_chu_lan_cha\n", + quineChallenge + }, + { + "b gdbme y encontrá el valor mágico", "¿Qué es un RFC?", + "gdb_rules\n", + gdbChallenge + }, + { + "Me conoces", "¿Fue divertido?", + "normal\n", + normalChallenge + } }; char too_easy = 'a'; diff --git a/include/sockets.h b/include/sockets.h index d750911..a07e312 100644 --- a/include/sockets.h +++ b/include/sockets.h @@ -12,7 +12,7 @@ #include "errors.h" #define PORT 8080 -#define MAX_PEND_REQ 3 +#define MAX_PEND_REQ 5 int createSocket(); void setSockOptions(int fd); diff --git a/src/sockets.c b/src/sockets.c index 6cf6d6e..c5d1286 100644 --- a/src/sockets.c +++ b/src/sockets.c @@ -11,7 +11,7 @@ int createSocket() { void setSockOptions(int fd) { int opt = 1; - if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) < 0) + if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt)) < 0) printSystemError("Sockets: setsockopt()"); }