I'm trying to implement a basic file server. I have been trying to use the sendfile command found here: http://linux.die.net/man/2/sendfile I'm using TCP.
I can have it send fine, but its sending in binary and I'm not sure if thats the hang up.
I am trying to receive the file with recv, but it isn't coming through correctly. Is there a special way to receive a binary file, and put it into a string?
EDIT: Asked to supply some code, here it is:
SENDFILE Call (from Server process)
FILE * file = fopen(filename,"rb"); if ( file != NULL) { /*FILE EXISITS*/ //Get file size (which is why we opened in binary) fseek(file, 0L, SEEK_END); int sz = ftell(file); fseek(file,0L,SEEK_SET); //Send the file sendfile(fd,(int)file,0,sz); //Cleanup fclose(file); } RECIEVE Call (from Client process, even more basic than a loop, just want a single letter)
//recieve file char fileBuffer[1000]; recv(sockfd,fileBuffer,1,0); fprintf(stderr,"\nContents:\n"); fprintf(stderr,"%c",fileBuffer[0]); EDIT: wrote some code for checking return values. sendfile is giving errno 9 - bad file number. Which im assuming is at my second file descriptor in the call (the one for the file i'm sending). I cast it as an int because sendfile was complaining it wasn't an int.
How should I use send file given the file pointer code I have used above in th sendfile call?