Salve,
ho fatto la seguente funzione
codice:
int ricevi_file(int conn_fd,struct dati *data){ 	
char messaggio[22]; 	ssize_t nread,nwritten; 	char dati_letti[1024]; 	size_t byte; 	char path[256]; 	int fd_trasf; 	int n;  	
//leggi messaggio esistenza file 	
if( (nread=read(conn_fd,&byte,sizeof(size_t))) < 0){ 		
perror("read byte error"); 		
exit(1); 	
} 	
if( (nread=read(conn_fd,messaggio,byte)) < 0){ 		
perror("read error"); 		
exit(1); 	
} 	
messaggio[nread]='\0'; 
	//*************************************************************** 	 	
printf("nread %d\n",nread); 		printf("messaggio %s\n",messaggio); 	
if( (n=strcmp("FILE TROVATO",messaggio)) == 0 ){ 		
//leggi dimensioni del file 		
if( (nread=read(conn_fd,&byte,sizeof(off_t))) < 0){ 			
perror("read() error"); 			
exit(1); 		
}  		
sprintf(path,"%s%s",STORE_DIRECTORY,data->file_name);  		
//creo e apro file sul filesystem locale 		
if( (fd_trasf=open(path,O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR)) < 0){ 			
perror("open() error"); 			
exit(1); 		
} 		
//leggo file e lo memorizzo 		
while( (nread=read(conn_fd,dati_letti,byte)) > 0){ 			
printf("nread %d\n",nread); 			
 if( ( nwritten=write(fd_trasf,dati_letti,nread)) != nread ){ 				
perror("nwrite() error"); 				
exit(1); 			
} 		
} 		
if( nread < 0 ){ 			
perror("read() error"); 			
exit(1); 		
} 		
return 1; 	} 	
else{ 		
printf("file inesistente\n"); 		
return 0;  	} 
}
Questa funzione se trova il file lo trasferisce attraverso un socket conn_fd e lo memorizza in fd_trasf.Il problema,la funzione non ritorna, sorge nella funzione write evidenziato in rosso.Cosa sbaglio?