codice:
/*Connection Accepting */

memset ( &Client, 0, sizeof(Client) );

while(j<BACKLOG) {

	if (( newsock_fd = accept ( sock_fd, ( struct sockaddr*) &Client ,&addr_len )) <0 ) {
		
		perror("Connection Accepting Error");

		close(newsock_fd);
		
		break;
		
	}

	j++;

       /* Write function*/ 

	iwrite = 0;
		
	while((iwrite<=3)&&(i=write(newsock_fd,&(buff[iwrite]),1)) >0 ) {

		if(i<0) {
		 		 
			perror("Writing error\n\n");
				
			close(newsock_fd);

			break;
			
		}
			
		iwrite+=i;
		
	}

	printf("Writing accomplished\n");


	/* Read function */        //una volta entrato in questo ciclo vorrei che se la read torna 
			//un valore negativo si chiudesse la connessione con close(newsock_fd)    

	while(1) {
	
		puts("READ ");
	
		string_len = STREAM;
	
		iread = 0;
	
		i=0;
	
		
		while((string_len>iread) && ((i=read(newsock_fd,&(buff[iread]),string_len))> 0 )) {
		
		printf("\n%d",i);
			
		if(i<=0) {      //non entra in questo if!!!
			
				
			perror("Reading error");

			close(newsock_fd);
			
			break;
			
		}
		
			
		if(buff[iread-1]=='\0') {
				
				
			printf("Reading accomplished\n");
			
				
			printf("letti %d bytes    tot=%d\n", i, i+iread);
			
				
			fflush(stdout);
			
				
			break;
		
		}

		
		iread+=i;
		
		
	}
	
		
	printf("ho letto: %d bytes\n",i);
	
		
	puts(buff);
	
		
	puts("SONO AI CONTROLLI!!");
	
		
	if((strncmp(buff,"ADD ",4))==0){
		
			
		printf("ADD\n");
		
			
		addmanipulate(buff);
		
	}
	
		
	if((strncmp(buff,"DEL ",4))==0){
			
			
		printf("DEL\n");
			
			
		delmanipulate(buff); 
		
	}
	
	
		
	if((strncmp(buff,"LIST",4))==0){
		
			
		printf("LIST\n");
		
	/*	listmanipulate();*/
     
		
		
			}


		}		
	}
}

}

close(sock_fd);

exit(0);

}