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

Rispondi quotando