Refactor code and add minor changes to sockets.c

Co-authored-by: Ezequiel Bellver <ebellver@itba.edu.ar>
Co-authored-by: Juan Barmasch <jbarmasch@itba.edu.ar>
This commit is contained in:
Santiago Lo Coco 2021-11-14 08:32:52 -03:00
parent e0c0ac68d9
commit ab7ae0c347
3 changed files with 77 additions and 32 deletions

View File

@ -6,36 +6,81 @@
#define MAX_CHALLENGES 12 #define MAX_CHALLENGES 12
challenge_t challenges[] = { 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 \ "Bienvenidos al TP3 y felicitaciones, ya resolvieron el primer acertijo.\n\n"
de cada nivel.\nAdemás tendrán que investigar otras preguntas para responder \ "En este TP deberán finalizar el juego que ya comenzaron resolviendo los desafíos "
durante la defensa.\nEl desafío final consiste en crear un programa que se \ "de cada nivel.\nAdemás tendrán que investigar otras preguntas para responder "
comporte igual que yo, es decir, que provea los mismos desafíos y que sea necesario \ "durante la defensa.\nEl desafío final consiste en crear un programa que se "
hacer lo mismo para resolverlos. No basta con esperar la respuesta.\nAdemás, \ "comporte igual que yo, es decir, que provea los mismos desafíos y que sea necesario "
deberán implementar otro programa para comunicarse conmigo.\n\nDeberán estar atentos \ "hacer lo mismo para resolverlos. No basta con esperar la respuesta.\nAdemás, "
a los easter eggs.\n\nPara verificar que sus respuestas tienen el formato correcto \ "deberán implementar otro programa para comunicarse conmigo.\n\nDeberán estar atentos "
respondan a este desafío con la palabra 'entendido\\n'", "¿Cómo descubrieron el protocolo, \ "a los easter eggs.\n\nPara verificar que sus respuestas tienen el formato correcto "
la dirección y el puerto para conectarse?", "entendido\n", NULL}, "respondan a este desafío con la palabra 'entendido\\n'", "¿Cómo descubrieron el protocolo, "
{"The Wire S1E5\n5295 888 6288", "¿Qué diferencias hay entre TCP y UDP y en qué casos \ "la dirección y el puerto para conectarse?",
conviene usar cada uno?", "itba\n", NULL}, "entendido\n",
{"https://ibb.co/tc0Hb6w", "¿El puerto que usaron para conectarse al server es el mismo \ NULL
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}, "The Wire S1E5\n5295 888 6288", "¿Qué diferencias hay entre TCP y UDP y en qué casos "
{"respuesta = strings:250", "¿Cómo garantiza TCP que los paquetes llegan en orden y no se \ "conviene usar cada uno?",
pierden?", "too_easy\n", NULL}, "itba\n",
{".data .bss .comment ? .shstrtab .symtab .strtab", "Un servidor suele crear un nuevo proceso \ NULL
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}, "https://ibb.co/tc0Hb6w", "¿El puerto que usaron para conectarse al server es el mismo "
{"¿?", "¿Qué aplicaciones se pueden utilizar para ver el tráfico por la red?", "que usan para mandar las respuestas? ¿Por qué?",
"BUmyYq5XxXGt\n", questionChallenge}, "M4GFKZ289aku\n",
{"Latexme\n\nSi\n \\mathrm{d}y = u^v{\\cdot}(v'{\\cdot}\\ln{(u)}+v{\\cdot}\\frac{u'}{u})\n\ NULL
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}, "EBADF...", "¿Qué útil abstracción es utilizada para comunicarse con sockets? ¿se puede "
{"b gdbme y encontrá el valor mágico", "¿Qué es un RFC?", "gdb_rules\n", gdbChallenge}, "utilizar read(2) y write(2) para operar?",
{"Me conoces", "¿Fue divertido?", "normal\n", normalChallenge} "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'; char too_easy = 'a';

View File

@ -12,7 +12,7 @@
#include "errors.h" #include "errors.h"
#define PORT 8080 #define PORT 8080
#define MAX_PEND_REQ 3 #define MAX_PEND_REQ 5
int createSocket(); int createSocket();
void setSockOptions(int fd); void setSockOptions(int fd);

View File

@ -11,7 +11,7 @@ int createSocket() {
void setSockOptions(int fd) { void setSockOptions(int fd) {
int opt = 1; 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()"); printSystemError("Sockets: setsockopt()");
} }