Caveat emptor: assigning a negative timeout to an uint64_t will make it wrap around to a large value, e.g. -1 becomes 0xFFFFFFFFFFFFFFFF.