PDA

Visualizza la versione completa : C problema sulla read in unix


lio.b
30-10-2009, 17:56
Salve a tutti,
ho un problema sulla read. Che io sappia di default bloccante.
Ho nel lato server un ciclo del tipo while(1) che legge tramite la read dei dati sulla socket. Alla prima interazione legge il dato ricevuto, al secondo "giro" non resta in attesa del dato ma legge o byte. Come mai?

oregon
30-10-2009, 17:57
Controlla se si sono verificati errori dopo la read (controlla errno)

lio.b
30-10-2009, 18:40
la read ritorna zero non -1 per cui non va in errore. Il frammento di codice questo:


while(1){
int c = read(sock_1,&pari,4);
int b = read(sock_2,&dispari,4);
printf("pari:%d\n",pari);
printf("dispari:%d\n",dispari);
printf("letti:%d\n",c);
printf("letti:%d\n",b);
if(pari<0||dispari<0){
printf("if\n");
break;}
somma = pari + dispari;
divisione = somma%2;
if(divisione==0){
write(sock_1,WON,strlen(WON)+1);
write(sock_2,LOST,strlen(LOST)+1);
printf("se f zero\n");
//close(sock_1);
//close(sock_2);
}
else{
write(sock_1,LOST,strlen(LOST)+1);
write(sock_2,WON,strlen(WON)+1);
//close(sock_1);
printf("else\n");
//close(sock_2);
}


}

lio.b
30-10-2009, 18:42
La cosa assurda sai qual'? che cicla soltanto 2 volte e poi esce dal while(1). Se per esempio i client inviano i numeri due e tre l'output :
pari:3
dispari:2
letti:4
letti:4
pari:3
dispari:2
letti:0
letti:0

lio.b
30-10-2009, 19:14
Per essere ancora pi preciso, se nel while scrivo solo questo:


while(1){
int c = read(sock_1,&pari,4);
int b = read(sock_2,&dispari,4);
}

le read leggono zero e vado in loop

Loading