2
我正在寫一個應該監聽域套接字的客戶端。我打開一個同步連接,做一個同步寫入,並且我知道服務器發送一個有效的響應,因爲我在套接字上使用了socat到eavesdrop。Asio沒有發現遠程系統的回覆
除了我的asio::read()
被調用但從不返回任何數據。我傳給它的緩衝區總是空的。這裏是我的代碼:
void operator>>(const vector<unsigned char> input, Socket &socket) {
const size_t size = input.size();
const size_t bytes = asio::write(socket.connection_socket, asio::buffer(input, size));
if (bytes != size) {
const std::error_code ec;
throw std::system_error(ec, fmt::format("Tried to send {0} bytes but sent {1} instead.", size, bytes));
}
string buffer;
asio::read(socket.connection_socket, asio::buffer(buffer));
std::cerr << buffer << std::endl;
}
這些都是我用來連接到插座屬性:
io_service run_loop;
stream_protocol::socket connection_socket;
datagram_protocol::endpoint domain_socket_ep;
Socket
是一個簡單的類,包裝所有短耳代碼,其中的運算符重載上述聲明。
不知道我明白。寫入套接字很好,asio只是不讀取它。爲什麼你需要寫和讀兩次?另外,不是read_to_buffer()和asio :: read_some一樣嗎? – ruipacheco
「_asio只是不從它讀取_」通過傳遞一個字符串大小爲零的asio ::讀取函數,你告訴asio讀取零字節。 TCP套接字不知道您發送了多少個字節。 「_as asio :: read_some_」,抱歉,我沒有看到[API]中列出的'asio :: read_some'函數(http://www.boost.org/doc/libs/1_62_0/doc/html/ boost_asio/reference.html),你是指哪一個? –
我的意思是socket.read_some():http://www.boost.org/doc/libs/1_60_0/doc/html/boost_asio/reference/basic_stream_socket/read_some/overload1.html – ruipacheco