C++ 是否在EOF UB之后读取?
我尝试将Poco和boost::iostreams::filtering_stream结合起来,发现了两个问题:C++ 是否在EOF UB之后读取?,c++,boost,poco-libraries,streambuf,C++,Boost,Poco Libraries,Streambuf,我尝试将Poco和boost::iostreams::filtering_stream结合起来,发现了两个问题: Poco::Net::HTTPChunkedStreamBuf::underflow仅在会话关闭后返回一次EOF boost::iostreams::detail:indirect_streambuf::underflow:返回值基于成功读取的符号数 Poco::Net::HTTPChunkedStreamBuf::underflow是否必须在会话关闭后重复返回EOF,或者在这种情况
Poco::Net::HTTPChunkedStreamBuf::underflow
仅在会话关闭后返回一次EOFboost::iostreams::detail:indirect_streambuf::underflow
:返回值基于成功读取的符号数Poco::Net::HTTPChunkedStreamBuf::underflow
是否必须在会话关闭后重复返回EOF,或者在这种情况下返回值未定义
仅当它从streambuf
读取0个符号时,才从boost::iostreams::detail::indirect_streambuf::underflow
返回EOF是否正确,或者它应该检查sgetc()
中的EOF并在这种情况下返回EOF
类处理程序:公共HTTPRequestHandler{
公众:
无效HandlerRequest(HTTPServerRequest和request,
HTTPServerResponse和response){
response.setKeepAlive(request.getKeepAlive());
response.setChunkedTransferEncoding(true);
auto&stream=request.stream();
boost::iostreams::过滤流;
push(boost::iostreams::tee(std::cout));
推(流);
字符串有效载荷;
teeStream>>有效载荷;
std::cerr除非您谈论的是标准库,否则不存在未定义行为的问题。任何正确编写的I/O API都应该在EOF时继续返回EOF。您使用的API是否正确编写是另一个问题。std::cin的行为是这样的。您可以在linux上按ctrl+D发送EOF,它不会开始返回EOF repea泰迪。
curl 'http://localhost:5959/' -H 'Transfer-Encoding: chunked' -d '1234'