Don't use addition when working with millis() times, use subtraction. This construct will fail if the addition causes an unsigned long rollover:
if(millis() > time_now + timeout){
This will continue to work even if millis() rolls over after time_now was set:
if(millis() - time_now > timeout){