fstream read behavior upon hitting eof

From the documentation:

If the input sequence runs out of characters to extract (i.e., the end-of-file is reached) before n characters have been successfully read, the array pointed to by s contains all the characters read until that point, and both the eofbit and failbit flags are set for the stream.

The number of characters successfully read and stored by this function can be accessed by calling member gcount.

So you can do:

while(in_file.read(buffer, buffer_length)){
    temp = sendto(sender_socket, buffer, sizeof(buffer), 0, NULL, 0); 
    byte_count += temp;
    msg_count ++;
}
streamcount n = in_file.gcount();
if (n > 0) { // read a partial buffer
    temp = sendto(sender_socket, buffer, n, 0, NULL, 0);
    byte_count += temp;
    msg_count++;
}

Leave a Comment