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);
}