用于tcp套接字的std :: streambuf不发送数据

时间:2017-12-24 09:55:14

标签: c++ sockets c++11 bufferedwriter streambuf

我尝试为socket编写缓冲的std :: streambuf。我已经写过无缓冲的std :: streambuf。我不明白为什么缓冲的streambuf不起作用。

    Socket::StreamBuf::StreamBuf(const IO &io, tcp::Socket *socket) :
            socket(socket),
            // wb is std::vector<char>
            wb(io.writing)  // set size
    {
        // write
        char_type *buf = wb.data();
        setp(buf, buf + (wb.size() - 1));

    };

    int Socket::StreamBuf::overflow(int c) {
        if(c != traits_type::eof()) {
            *pptr() = c;
            pbump(1);

            if(sync() == -1) return traits_type::eof();
        }

        return c;
    }

    int Socket::StreamBuf::sync() {
        if(pptr() && pptr() > pbase()) {
            Int32 sz = Int32(pptr() - pbase());

            // int Socket::send(char *data, int size)
            // return sent bytes count
            if (socket->send(pbase(), sz) == sz) {
                pbump(-sz);
                return 0;
            }
        }

        return -1;
    }

0 个答案:

没有答案