make fd generator ->open's return whether they succeeded

and propagate that failure upwards