The server that Im working on (which is a Unix C multi-threaded non-block socket server) need to receive a file from a client and broadcast it to all the other clients connected to the server.
Everything is working at the exception that Im having a hard time to determine when a file is done transferring… since Im using non-block socket Im having the issue that sometimes during the file transfer recv return -1 (which I was assuming was the end of the file) then the next pass more bytes comes in.
I try to hack the whole thing putting “END” at the end of the stream. However, sometimes when multiple files are sent in a row the “END” is part of the same recv buffer as the beginning of the next file. Or even worst, sometimes I end up with a buffer that finish with EN and the next pass the D comes in.
What would be the best approach to avoid the situations mentioned above, I don’t really want that each time I receive some bytes from the socket loop the whole accumulated buffer to check if “END” is part of it then cut appropriately… Im sure there’s a better solution to this right?
Thanks in advance!
The most simpe case EJP is referring to, the case where you take the closing of the socket by the other end as end-of-file, could look like the following: