C++ 是否在EOF UB之后读取?

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和boost::iostreams::filtering_stream结合起来,发现了两个问题:

  • Poco::Net::HTTPChunkedStreamBuf::underflow
    仅在会话关闭后返回一次EOF
  • boost::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'