PDA

View Full Version : [C] Printf printfa quando gli pare


lefantome
09-12-2010, 00:22
Allora ho questo scenario:

-2 programmi: 1 server e 1 client che si scambiano messaggi vari

-Il client ha 2 thread: uno che gestisce l'input da tastiera e invia i messaggi e uno che li riceve e li stampa utilizzando un socket di connessione.

Ora utilizzando uno script bash faccio inviare vari messaggi al server destinati allo stesso client e stampo il risultato su un file (ridirezione output tramite script bash)

Ora testando il server so che i messaggi gli arrivano e li invia, il problema é che abbastanza spesso, eseguendo sempre lo stesso script i messaggi non arrivano o arrivano in maniera parziale, mentri in altri casi tutto ok.

é un problema di fflush? non so come fare. Non penso ci siano race condition nel client.

/**=====================================Thread In=================================== */

void* in(void* arg){

info* inf = (info*)arg;
int* fd = inf->fd;


message_t* msg;
msg = (message_t*)malloc(sizeof(message_t));

while (msg->type != MSG_OK) /* quando riceve MSG_OK significa che aveva inviato un MSG_EXIT al server quindi chiude tutto */
{

/** IF AVAILABLE INPUT? */
if (*inf->av_inputrd == 1)
{
receiveMessage(*fd,msg);

if (msg->length >0){printf ("%s\n",msg->buffer);
free(msg->buffer);}
*inf->av_inputrd =0;
}


}


/** Ripulire ambiente */
free(msg);
/*printf("Thread READER chiuso\n");*/

pthread_exit(0);

}

lefantome
09-12-2010, 13:07
nessuno ha mai avuto un problema simile?:muro:

banryu79
09-12-2010, 13:11
Hia già provato a verificare se tutti i "messaggi" arrivano effettivamente a destinazione? Magari contando quante volte viene invocata la receiveMessage?

WarDuck
09-12-2010, 14:20
Prova ad usare la fprintf sullo stderr.