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 のカスタマイズ