CLX C++ Libraries - sockstream
Author: clown

CLX C++ Libraries
Home >> sockstream

# Declaration

    template <
        class Socket,
        class CharT = char,
        class Traits = std::char_traits<CharT>
    >
    class basic_sockstream : public Socket, public basic_iostream<CharT, Traits>;

    namespace tcp {
        typedef basic_socket<AF_INET> socket;
        typedef basic_sockstream<socket> sockstream;
    };

    namespace udp {
        typedef basic_socket<AF_INET> socket;
        typedef basic_sockstream<socket> sockstream;
    };

    namespace ssl {
        typedef basic_socket<sslv23, AF_INET> socket;
        typedef basic_sockstream<socket> sockstream;
    };

# Overview

TCP などのストリームタイプのデータ通信を C++ の iostream のように行うためのクラスです． 現在のところ，TCP および UDP によるデータ通信をサポートしています．

sockstream は，boost::asio，namespace gimite を参考に作成しました．

# Example

example_sockstream.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 {
            /*
             * 第1引数にホスト名（またはIPアドレス），
             * 第2引数にポート番号を指定する．
             */
            clx::tcp::sockstream ss(argv[1], 80);
            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;
            std::exit(-1);
        }
        catch (clx::sockaddress_error& e) {
            std::cerr << e.what() << std::endl;
            std::exit(-1);
        }

        return 0;
    }

# Template Parameters

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

# Related Types

    typedef Socket socket_type;
    typedef std::basic_iostream<CharT, Traits> iostream_type;
    typedef CharT char_type;
    typedef std::basic_string<CharT, Traits> string_type;
    typedef basic_sockbuf<TransmitFunc, CharT, Traits> sockbuf_type;
    typedef typename sockbuf::size_type size_type;

# Construction and Member Functions

    explicit basic_sockstream(const socket_type& s, size_type n = 65536);
    explicit basic_sockstream(const char_type* host, int port, size_type n = 65536);
    explicit basic_sockstream(const string_type& host, int port, size_type n = 65536);
    virtual ~basic_sockstream();

# Related Pages

1. CLX C++ Libraries - sockbuf
2. CLX C++ Libraries - udp::socket
3. CLX C++ Libraries - tcp::socket
4. CLX C++ Libraries - ssl::socket

# References

1. Boost C++ Libraries - Boost.Asio
2. namespace gimite - C++ 小物集
3. iostream の拡張
4. C++ の iostream