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:
parent
e0c0ac68d9
commit
ab7ae0c347
|
@ -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';
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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()");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue