Can any of the boffins here help with the following. I'm learning sockets with a book i found online called Definitive Guide to Linux Network Programming. The section of code I am struggling with is for a server which reads a file with handle fd and sends it through the socket socket2.
Things are slightly more complicated since I'm also translating the code from Posix functions to Ansi-c.
This is the original code.
Code:int fd; int readCounter, writeCounter; char* bufptr; char buf[MAXBUF]; while((readCounter = read(fd, buf, MAXBUF)) > 0) { writeCounter = 0; bufptr = buf; while (writeCounter < readCounter) { readCounter -= writeCounter; bufptr += writeCounter; writeCounter = write(socket2, bufptr, readCounter); if (writeCounter == -1) { fprintf(stderr, "Could not write file to client!\n"); close(socket2); continue; } } }
This is the translation into ansi-c, which works ok.
But I'm unsure of the code. So I just tried the following and it also works fine.Code:int readCounter, writeCounter; char* bufptr; char buf[MAXBUF]; FILE *fd; /* read the file, and send it to the client in chunks of size MAXBUF */ while((readCounter = fread(buf,1, MAXBUF,fd)) > 0) { writeCounter = 0; bufptr = buf; while (writeCounter < readCounter) { readCounter -= writeCounter; bufptr += writeCounter; writeCounter = send(socket2, bufptr, readCounter,0); if (writeCounter == -1) { fprintf(stderr, "Could not write file to client!\n"); closesocket(socket2); continue; } } }
So what IS the additional code of the original doing?Code:/* read the file, and send it to the client in chunks of size MAXBUF */ while((readCounter = fread(buf,1, MAXBUF,fd)) > 0) { writeCounter = send(socket2, buf, readCounter,0); if (writeCounter == -1) { fprintf(stderr, "Could not write file to client!\n"); closesocket(socket2); continue; } }



3Likes
LinkBack URL
About LinkBacks



