Report the actual timeout used in the timeout error message

This removes duplicated logic for converting negative values to -1000ms (for the timeout and socketTimeoutMS vars). Additionally, we will only calculate rtimeout once before performing our first read (excluding another calculation should we need to revert to socketTimeoutMS at the end of the function).