Only poll negotiate if we've read data.
Handle negotiate failure.
Actually set the timer first.
Shut down connection when deleted.

Since there will only be once instance of this anyway.
Break out of io_service loop when exiting.

The io_service might be waiting inside a run_one call. This makes sure
that it exits as soon as the exit flag is set.