Por algun momento pense en colar el titulo de "ayuda mi programa se cierra sin motivo", pero no es demasiado genérico y solo un novato lo haría
Quiero explorar los diversos motivos por los que un programa en C se cierra. De momento vienen a mi mente los siguientes motivos:
- llamaa explicita a exit o variantes
- bufferoverflow y variantes de segment fault
- NULL pointer... (parecido al anterior)
- No poder asignar mas memoria
- No poder crear mas threads
Algunos son salidas explícitamente programadas y otras son por bugs.
Tengo un proyecto en C, es un servidor WEB multihilo:
https://github.com/albertobsd/chttpserv
De momento funciona bien cuando hago peticiones mediante curl incluso soporta un ciclo sin fin de peticiones:
Código
while true; do curl -i http://localhost:3002/ ; done
Sin embargo cuando le hago las peticiones desde cualquier otro navegador que procese todos los archivos y CIERRO el navegador a media carga el programa simplemente se sale sin mensaje de error.
OJO que solo es cuando cierro a media carga, si espero a que termine de cargar la pagina por completo esto no sucede.
Consideraciones:
- Estoy totalmente seguro de que la mayoría de las funciones que pueden dar error están correctamente procesadas y muestran el error correspondiente:
Código
s = pthread_create(&tid,&attr,thread_process,(void *)tothread); if(s != 0) { }
- Todas las funciones de lectura y escritura en el socket se valida si leyeron o escribieron los datos y no devolvio error:
Código
if(readed > 0) sended = send(hsc->client_fd,buffer,readed,0); } if(sended == -1) { } if(readed == -1) { }
- También estoy seguro que no es un problema de memoria ya que tengo una libreria propia con la que me he asegurado tras varias pruebas de que todos los apuntadores asignados con malloc/calloc son liberados y no se vuelven a utilizar, ademas de indicarme la cantidad de memoria dinamica actualmente utilizada.
- De igual manera todos los sockets son cerrados mediante:
Código
shutdown(hsc->client_fd,SHUT_RDWR); close(hsc->client_fd);
Se que el problema tiene que ver con Sockets ya que solo cuando cierro el navegador a media carga el programa termina.
Me he quedado un poco estancado, ya que siento que no avanzo si no soluciono ese error.
No les pido que depuren mi codigo, ya que no esta 100% documentado.
Pregunto: ¿Alguien a tenido el mismo problema?, ¿Que otros motivos hacen que el programa se cierre y no caiga error en ninguna función?
Saludos