PDA

View Full Version : [C] Errore nel makefile


madluke
16-07-2008, 15:46
Ciao a tutti,
Ho fatto un progetto in C, con interazione client/server. Utilizzo il makefile, e il tutto funziona appunto tra due shell, una è il client e l'altra è il server.
L'esecuzione va tutta a buon fine, ma subito dopo la chiusura della socket lato client, appare questo errore:


make: *** [sc] Error 35


Ho già controllato tutti gli spazi nel makefile, e ho fatto attenzione che fossero tutti tab. Non so più cosa pensare.

Qualcuno mi sa dire se è un errore noto? E in caso come lo avete risolto?

Vi ringrazio in anticipo

ilsensine
16-07-2008, 15:56
Potresti chiarire cosa c'entra la chiusura di un socket con make? :)
(stai forse lanciando il programma dal makefile?)

madluke
16-07-2008, 16:06
Potresti chiarire cosa c'entra la chiusura di un socket con make? :)
(stai forse lanciando il programma dal makefile?)

Sì sto lanciando il programma dal makefile, e il server l'ho implementato per farlo lavorare in un loop infinito, invece i client eseguono una funzione e alla fine del loro lavoro chiudono la socket.
Ecco esattamente dopo la chiusura della socket appare l'errore.

ilsensine
16-07-2008, 16:14
Quindi make ha rilevato un errore dell'applicazione. Questo può essere dovuto a:
- la tua main non finisce con "return 0" (ad es. hai dichiarato erroneamente la main come "void main" invece che "int main")
- l'applicazione è andata in crash
- se si tratta del lato server, la chiusura del socket sul client può aver generato un SIGPIPE che non gestisci. Usa signal o sigaction per gestire/ignorare SIGPIPE, oppure imposta MSG_NOSIGNAL nei flag delle funzioni socket (send/recv).

Se esegui l'applicazione direttamente, non dal makefile, dovresti leggere se termina per un crash o per un sigpipe.

madluke
16-07-2008, 16:22
Ti ringrazio per i consigli, purtroppo non ho risolto lo stesso.

Comunque il problema si presenta solo se utilizzo il makefile per lanciare l'applicazione, se non lo utilizzo non mostra alcun errore, anche seguendo tutta l'esecuzione col debugger è tutto perfetto.
E' per questo che non capisco proprio, e ho pensato potesse essere un errore del makefile e non dell'implementazione C.

ilsensine
16-07-2008, 16:29
Comunque il problema si presenta solo se utilizzo il makefile per lanciare l'applicazione, se non lo utilizzo non mostra alcun errore
esegui il programma da console e attendi che termini. Esegui a quel punto
echo $?
cosa viene riportato?

E' per questo che non capisco proprio, e ho pensato potesse essere un errore del makefile e non dell'implementazione C.
Allega i sorgenti del makefile e dell'applicazione...

madluke
16-07-2008, 17:25
Ok, ti ringrazio ma ho risolto, ho levato la chiusura della socket di dialogo lato server!

Grazie per i consigli!