今天用asio寫一個簡單的server時,
當(dāng)連接成功時做如下工作
1        asio::async_read(socket_, asio::buffer(&m_packet, sizeof(m_packet)),
2          boost::bind(&tcp_connection::HandleReadCardKey, shared_from_this(),
3            asio::placeholders::error));
但HandleReadCardKey始終沒有被回調(diào),除非remote point斷開連接

最后用下面的代碼搞定:
1 socket_.async_read_some(asio::buffer(&m_packet, sizeof(m_packet)),
2           boost::bind(&tcp_connection::HandleReadCardKey, shared_from_this(),
3           asio::placeholders::error));
記下,免得以后忘記了

總結(jié)一下:
      asio::async_read通常用戶讀取指定長度的數(shù)據(jù),讀完或出錯才返回。
      而socket的async_read_some讀取到數(shù)據(jù)或出錯就返回,不一定讀完了整個包。