attempt to free handle unless it was free'd already
use ETIMEDOUT instead of Timeout::Error
update buffer allocation strategy