CLX C++ Libraries - sockbuf
Author: clown

CLX C++ Libraries
Home >> sockstream >> sockbuf

# Declaration

    template <
        class Socket,
        class CharT = char,
        class Traits = std::char_traits<CharT>
    >
    class basic_sockbuf : public std::basic_streambuf<CharT, Traits>;

    namespace tcp {
        typedef basic_socket<AF_INET> socket;
        typedef basic_sockbuf<socket> sockbuf;
    }

    namespace udp {
        typedef basic_socket<AF_INET> socket;
        typedef basic_sockbuf<socket> sockbuf;
    }

# Overview

sockstream 用のストリームバッファです．std::iostream のストリームバッファとして利用することもできます．

# Example

example_sockbuf.cpp

    #include <iostream>
    #include <sstream>
    #include <string>
    #include <cstdlib>
    #include "clx/tcp.h"

    int main(int argc, char* argv[])
    {
        if (argc < 3) return -1;

        try {
            clx::tcp::socket s(argv[1], 80);

            // sockbuf と iostream を用いて sockstream を生成する方法．
            clx::tcp::sockbuf sbuf(s, 2048);
            std::iostream ss(&sbuf);

            std::stringstream query;
            query << "GET /" << argv[2] << " HTTP/1.1\r\n";
            query << "Host: " << argv[1] << "\r\n";
            query << "\r\n";
            ss << query.str() << std::flush;

            std::string buf;
            while (std::getline(ss, buf)) std::cout << buf << std::endl;
        }
        catch (clx::socket_error& e) {
            std::cerr << e.what() << std::endl;
            return -1;
        }
        catch (clx::sockaddress_error& e) {
            std::cerr << e.what() << std::endl;
            return -1;
        }

        return 0;
    }

# Template Parameters

Socket
  TCP または UDP のソケットクラスを指定します．
CharT
  文字の型を指定します．デフォルト値は，char．
Traits
  文字列を扱うためのtraitsを指定します．デフォルト値は， std::char_traits<CharT>．

# Related Types

    typedef Socket socket_type;
    typedef CharT char_type;
    typedef Traits traits;
    typedef typename std::vector<CharT> container;
    typedef typename container::size_type size_type;
    typedef typename Traits::int_type int_type;

# Construction and Member Functions

    explicit basic_sockbuf(size_type n = 65536);
    explicit basic_sockbuf(socket_type& s, size_type n = 65536);
    virtual ~basic_sockbuf();

    void socket(socket_type& s);

# Related Page

1. CLX C++ Libraries - sockstream

# Referrence

1. streambuf のカスタマイズ