add in a channel timeout - like ruby better with alarms