Título: Se me cierra el socket. No veo el motivo. Publicado por: @XSStringManolo en 30 Marzo 2020, 01:18 am Hago lo siguiente:
Creo y guardo el código. $ nano server.cpp control + x enter Compilo: $ g++ server.cpp -o server Doy permisos: $ chmod +775 server Ejecuto: $ ./server 8080 Conecto al server: $ netcat 127.0.0.1 8080 Envio comando prueba 1: ls Envio comando prueba 2: ls Envio comando prueba 3: ls Ya no lo recibe. Envio comando prueba 4: broken pipe Pruebo por si el server siguiese up: $ netcat 127.0.0.1 8080 connection refused. La aplicación se paró pero no encuentro el motivo. Código
Título: Re: Se me cierra el socket. No veo el motivo. Publicado por: RayR en 30 Marzo 2020, 04:49 am Hay algunos errores en tu código. El principal es esta línea:
Código
En el if anterior ya verificabas si hubo error, por lo que si llegamos hasta aquí, eso significa necesariamente que fork se ejecutó exitosamente, luego este if sobra, y de hecho, en este caso lo que hace es que la conexión se cierre siempre que no haya error, que es justo lo que está causando tu problema. Lo que siempre se debe hacer después de llamar a fork y comprobar que no falló, es verificar si estamos en el proceso hijo (fork devolvió 0) o en el padre, y actuar en consecuencia. Tal como está el programa, sólo se acepta un mensaje por conexión, pero por lo que comentas al inicio, no sé si sea lo que quieres. Si no es así, no llames a exit sino hasta que se cumpla cierta condición, como recibir el mensaje "CLOSE". Edito: porque veo que se me cruzaron dos ideas, y en lo que borraba para corregir, terminé diciendo algo a medias. Lo que quise decir es que el programa tal como está tendrá procesos zombis, porque no hay ningún wait, aunque realmente esto sólo representaría un problema si creas muchos procesos hijos. Tu función callback no detectará correctamente errores, ya que write y read devuelven -1 cuando algo falló, pero tú estás verificando que devuelvan un valor menor a -1 (ERROR). |