Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312

    C problema sulla read in unix

    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?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Controlla se si sono verificati errori dopo la read (controlla errno)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    la read ritorna zero non -1 per cui non va in errore. Il frammento di codice è questo:
    codice:
    	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);
    		}
    
    	
    	}

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    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

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Per essere ancora più preciso, se nel while scrivo solo questo:
    codice:
    	while(1){
    		int c = read(sock_1,&pari,4);
    		int b = read(sock_2,&dispari,4);
            }
    le read leggono zero e vado in loop

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.