Since 2f32a2b52ff5c07393a21362900652c5f9f4dc88, it's no longer possible to use a stream with client.request
.
Tested with MSVS 2013 (toolset v120) and boost v1.62.
I hacked a bit one of your test by using a stringstream
instead of a simple string
. Then it's easy to reproduce the bug.
diff --git a/tests/io_test.cpp b/tests/io_test.cpp
index e8b1c5d..6d014fd 100644
--- a/tests/io_test.cpp
+++ b/tests/io_test.cpp
@@ -1,7 +1,8 @@
-#include "server_http.hpp"
-#include "client_http.hpp"
+#include "../server_http.hpp"
+#include "../client_http.hpp"
#include <cassert>
+#include <iostream>
using namespace std;
@@ -42,7 +43,8 @@ int main() {
{
stringstream output;
- auto r=client.request("POST", "/string", "A string");
+ stringstream ss("A string");
+ auto r=client.request("POST", "/string", ss);
output << r->content.rdbuf();
assert(output.str()=="A string");
}
It fails on a this
which is null
.
> ConsoleApplication1.exe!boost::asio::basic_io_object<boost::asio::stream_socket_service<boost::asio::ip::tcp>,1>::get_service() Line 210 + 0x3 bytes C++
ConsoleApplication1.exe!boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp> >::async_write_some<boost::asio::const_buffers_1,boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp> >,boost::asio::const_buffers_1,boost::asio::detail::transfer_all_t,boost::asio::detail::write_streambuf_handler<std::allocator<char>,<lambda_63f912c45b0502cf50ae96e7f30352af> > > >(const boost::asio::const_buffers_1 & buffers, boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp> >,boost::asio::const_buffers_1,boost::asio::detail::transfer_all_t,boost::asio::detail::write_streambuf_handler<std::allocator<char>,<lambda_63f912c45b0502cf50ae96e7f30352af> > > && handler) Line 732 + 0x1b bytes C++
ConsoleApplication1.exe!boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp> >,boost::asio::const_buffers_1,boost::asio::detail::transfer_all_t,boost::asio::detail::write_streambuf_handler<std::allocator<char>,<lambda_63f912c45b0502cf50ae96e7f30352af> > >::operator()(const boost::system::error_code & ec, unsigned int bytes_transferred, int start) Line 336 + 0x7b bytes C++
ConsoleApplication1.exe!boost::asio::async_write<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp> >,boost::asio::const_buffers_1,boost::asio::detail::transfer_all_t,boost::asio::detail::write_streambuf_handler<std::allocator<char>,<lambda_63f912c45b0502cf50ae96e7f30352af> > >(boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp> > & s, const boost::asio::const_buffers_1 & buffers, boost::asio::detail::transfer_all_t completion_condition, boost::asio::detail::write_streambuf_handler<std::allocator<char>,<lambda_63f912c45b0502cf50ae96e7f30352af> > && handler) Line 598 + 0x4d bytes C++
ConsoleApplication1.exe!boost::asio::async_write<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp> >,std::allocator<char>,<lambda_63f912c45b0502cf50ae96e7f30352af> >(boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp> > & s, boost::asio::basic_streambuf<std::allocator<char> > & b, SimpleWeb::ClientBase<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp> > >::request::__l18::<lambda_63f912c45b0502cf50ae96e7f30352af> && handler) Line 755 + 0x78 bytes C++
ConsoleApplication1.exe!SimpleWeb::ClientBase<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp> > >::request(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & request_type, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & path, std::basic_iostream<char,std::char_traits<char> > & content, const std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > > & header) Line 148 + 0x4b bytes C++
ConsoleApplication1.exe!main() Line 53 + 0x84 bytes C++
ConsoleApplication1.exe!__tmainCRTStartup() Line 626 + 0x19 bytes C
ConsoleApplication1.exe!mainCRTStartup() Line 466 C
kernel32.dll!751562c4()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
ntdll.dll!777c0719()
ntdll.dll!777c06e4()