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
#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);