Allow None or -1 for timeouts