only sends disconnect_error when absolutely needed