Una de las principales causas de la desaprobación del practico es a causa de como implementan socket, es común ver que en cada código de un proceso repiten el mismo código modificado y a medida que van avanzando en el TP van parcheando y re parcheando todo dejando para el final algo completamente inestable.
Mi consejo es que creen una librería que se encargue 100% de toda la funcionalidad que involucre los socket como la que comparto en el siguiente repositorio:
https://github.com/nahuelpanzarasa/socket-library-c
Van a encontrar toda la información que necesiten en la descripción de este Gits. Si hay algo que no se comprenda bien, me pueden escribir por acá y voy a ir mejorando con el tiempo la documentación.
Entonces, antes de comenzar con el trabajo practico realicen esta librería (si ya están cancheros con el lenguaje, si no realicen practica sobre C que pueden encontrar en la página utn.so). También antes de comenzar, realicen una documentación del protocolo, es decir por cada proceso que tienen que desarrollar definan por escrito con todo el grupo del TP cuáles son las llamadas que van a recibir de otros procesos, cuales son las que van a realizar en otros procesos y que información esta involucrada en estas llamadas. No pueden comenzar a codear el TP (excepto la librería de socket que se supone que es genérica) sin antes tener bien definido el protocolo que van a utilizar. Les comparto un ejemplo de protocolo que fue el que utilizamos para el TP del año pasado:
https://docs.google.com/document/d/1iWV5...KSLGQ/edit
Luego verifiquen esta información con sus ayudantes asignados. SI no hacen esto es muy probable que a futuro se den cuenta de cosas que están haciendo mal y las tengan que volver a realizar de la forma correcta, habiendo perdido el recurso más importante para poder aprobar, que es el tiempo.
Éxitos con el TP y espero haberles sido de ayuda.
Saludos!