Προς το περιεχόμενο

Socket-write() c


Eldrad

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα.

Προσπαθώ να φτιάξω έναν 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);
}

Δημοσ.
η write θα γράψει κανονικά στο κλειστό socket

 

Εννοείς στο remotely closed socket ; Σωστά;

 

Δοκίμασε να χρησιμοποιήσεις send(...,...,...,0); αντί για write();

 

Αν δεν δουλέψει ούτε αυτό μπορείς να χρησιμοποιήσεις το select() για να εξετάσεις αν το socket είναι έτοιμο για γράψιμο.

Δημοσ.

Πρέπει να χρησιμοποιήσουμε την write() και τελικά βρήκα μια άλλη λύση. Γράφω 1-1 byte και με αυτόν τον τρόπο όταν κλείσει το socket μου πετάει άλλο error η write() (bad address). Αλλά γιατί το sigpipe δεν έρχεται με τι μια?

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...