timer.async_wait(boost::bind(&tftp_connection::callback ), this);
should be
timer.async_wait(boost::bind(&tftp_connection::callback, this));
You need to bind the object to the member function, since the member function cannot work without the object it belongs to.
See boost examples for using member functions as callbacks with async_wait