Eldrad Δημοσ. 8 Δεκεμβρίου 2009 Δημοσ. 8 Δεκεμβρίου 2009 Καλησπέρα. Προσπαθώ να φτιάξω έναν server σε c ο οποίος θα δέχετε και θα στέλνει μυνήματα. Το πρόβλημα στο thread της write. Όταν το connection κλείνει η write θα γράψει κανονικά στο κλειστό socket μια φόρα και στην επόμενη προσπάθεια θα δεχτεί το sigpipe (το οποίο το κάνω handle). Μπορεί μήπως να μου εξηγίσει κάπιος γιατί ακριβώς συμβένει αυτό και πως μπορώ να το λύσω? >while(1){ while(test==0) pthread_yield(); printf("Press for write\n"); //getchar(); pthread_mutex_lock(&Testable); test=0; rc = write(args.socket,metafores,sizeof(metafores)); if(errno == EPIPE){ printf("To socket ekleise\n"); pthread_mutex_lock (&AllThreadsListMutex); removeThreadFromTheList(pthread_self()); close(args.socket); pthread_mutex_unlock (&AllThreadsListMutex); pthread_exit(0); }else if(rc<=0) printf("Hrthe allo error... %d\n",errno); pthread_mutex_unlock(&Testable); }
yourse.gr Δημοσ. 9 Δεκεμβρίου 2009 Δημοσ. 9 Δεκεμβρίου 2009 η write θα γράψει κανονικά στο κλειστό socket Εννοείς στο remotely closed socket ; Σωστά; Δοκίμασε να χρησιμοποιήσεις send(...,...,...,0); αντί για write(); Αν δεν δουλέψει ούτε αυτό μπορείς να χρησιμοποιήσεις το select() για να εξετάσεις αν το socket είναι έτοιμο για γράψιμο.
Eldrad Δημοσ. 9 Δεκεμβρίου 2009 Μέλος Δημοσ. 9 Δεκεμβρίου 2009 Πρέπει να χρησιμοποιήσουμε την write() και τελικά βρήκα μια άλλη λύση. Γράφω 1-1 byte και με αυτόν τον τρόπο όταν κλείσει το socket μου πετάει άλλο error η write() (bad address). Αλλά γιατί το sigpipe δεν έρχεται με τι μια?
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.