gaurd against double close

We ran into a production bug with this. It looks like somehow the
    socket was double closed and two timers were allocated.

This just gaurds against the socket not existing instead of
    removing the race condition completely.

cc @jsu1212 @sh1mmer @Matt-Esch @kriskowal