sockets - C sendfile and then other text -
this snippet of client code:
while(((uint32_t)total_bytes_read != fsize) && ((nread = read(sockd, filebuffer, sizeof(filebuffer))) > 0)){ if(write(fd, filebuffer, nread) < 0){ perror("write"); close(sockd); exit(1); } total_bytes_read += nread; } memset(buffer, 0, sizeof(buffer)); if(recv(sockd, buffer, sizeof(buffer), 0) < 0){ perror("errore ricezione 226"); close(sockd); exit(1); } printf("%s", buffer); memset(buffer, 0, sizeof(buffer)); if(recv(sockd, buffer, sizeof(buffer), 0) < 0){ perror("errore ricezione 221"); close(sockd); exit(1); } printf("%s", buffer); close(fd);
where first receives file , listen 2 server's messages.
here snippet of server:
offset = 0; rc = sendfile(newsockd, fd, &offset, filestat.st_size); if(rc == -1) { fprintf(stderr, "errore durante l'invio di: '%s'\n", strerror(errno)); onexit(newsockd, sockd, fd, 3); } if((uint32_t)rc != fsize) { fprintf(stderr, "trasferimento incompleto: %d di %d bytes inviati\n", rc, (int)filestat.st_size); onexit(newsockd, sockd, fd, 3); } memset(buffer, 0, sizeof(buffer)); strcpy(buffer, "226 file trasferito con successo\n"); if(send(newsockd, buffer, strlen(buffer), 0) < 0){ perror("errore durante l'invio 226"); onexit(newsockd, sockd, 0, 2); } memset(buffer, 0, sizeof(buffer)); strcpy(buffer, "221 goodbye\n"); if(send(newsockd, buffer, strlen(buffer), 0) < 0){ perror("errore durante l'invio 221"); onexit(newsockd, sockd, 0, 2); }
the problem file have been retrived contains 2 messages sent server o.o
why happens? i've said client "recv until file size"...i don't understand why file contains 2 messages -.-''
while(((uint32_t)total_bytes_read != fsize) && ((nread = read(sockd, filebuffer, sizeof(filebuffer))) > 0))
if happen read 1 more byte fsize statement still true , won't break out of loop.
Comments
Post a Comment