Δημοσιεύτηκε: 15 Απρ 2010, 11:16
Καταρχήν γεια σου και απο μένα.
Το segmentation fault που παράγεται από τον κώδικα που παράθεσες φαίνεται να οφείλεται στη συνάρτηση error. Βάζοντας ένα printf πριν και μετά ή κανοντας αποσφαλμάτωση με gdb, θα βρεις ότι αυτό το core φαίνεται να βγαίνει κατά την κλήση της συνάρτησης
error("Disconnected").
Προσπάθησε να την ορίσεις πριν τη main(). Δηλαδή :
Αυτό γιατί η perror() πρέπει να είναι μέσα σε αυτές που βρίσκονται στα αρχεία κεφαλίδες που έχεις ορίσει. Αν θες, ψάξε γιατί η μεταγλώτιση αναφέρει μηνύματα προειδοποίησης (warnings). Καλό είναι να μην υπάρχουν τέτοια μηνύματα. Επίσης δεν υπάρχει αρχείο strings.h αλλά string.h. Υπάρχουν κλήσεις σε συναρτήσεις εσωτερικά που απαιτούν το stdlib.h. Ακόμα για τη χρήση της perror() προσθέτουμε το αρχείο errno.h
Τέλος αν προσθέσεις άμεσα το αρχείο κεφαλίδα unistd.h, αντί του /sys/types.h (στο οποίο περιέχεται όμως), και το αρχείο arpa/inet.h δε θα έχεις τόσα προειδοποιητικά μηνύματα.Ένα τελευταίο warning αφορά τη μετατροπή της δομής servaddr από τύπο sockaddr_in σε τύπο const *sockaddr η οποία θα γίνει αν γράψεις
Το segmentation fault που παράγεται από τον κώδικα που παράθεσες φαίνεται να οφείλεται στη συνάρτηση error. Βάζοντας ένα printf πριν και μετά ή κανοντας αποσφαλμάτωση με gdb, θα βρεις ότι αυτό το core φαίνεται να βγαίνει κατά την κλήση της συνάρτησης
error("Disconnected").
Προσπάθησε να την ορίσεις πριν τη main(). Δηλαδή :
- Κώδικας: Επιλογή όλων
void error(char* message);
void error(char* message){
perror(message);
exit(0);
}
Αυτό γιατί η perror() πρέπει να είναι μέσα σε αυτές που βρίσκονται στα αρχεία κεφαλίδες που έχεις ορίσει. Αν θες, ψάξε γιατί η μεταγλώτιση αναφέρει μηνύματα προειδοποίησης (warnings). Καλό είναι να μην υπάρχουν τέτοια μηνύματα. Επίσης δεν υπάρχει αρχείο strings.h αλλά string.h. Υπάρχουν κλήσεις σε συναρτήσεις εσωτερικά που απαιτούν το stdlib.h. Ακόμα για τη χρήση της perror() προσθέτουμε το αρχείο errno.h
Τέλος αν προσθέσεις άμεσα το αρχείο κεφαλίδα unistd.h, αντί του /sys/types.h (στο οποίο περιέχεται όμως), και το αρχείο arpa/inet.h δε θα έχεις τόσα προειδοποιητικά μηνύματα.Ένα τελευταίο warning αφορά τη μετατροπή της δομής servaddr από τύπο sockaddr_in σε τύπο const *sockaddr η οποία θα γίνει αν γράψεις
- Κώδικας: Επιλογή όλων
connect(sockfd_cl,(struct sockaddr*)&servaddr,sizeof(servaddr));
- Κώδικας: Επιλογή όλων
gcc -o test.o -Wall test.c