CLX C++ Libraries
Home >> tcp::socket

Declarations

namespace tcp {
    template <int Family>
    class basic_socket : public basic_rawsocket<SOCK_STREAM, Family, 0>;
    
    typedef basic_socket<AF_INET> socket;
    typedef basic_sockaddress<AF_INET, IPPROTO_TCP> sockaddress;
    typedef basic_acceptor<AFINET> acceptor;
    typedef basic_sockbuf<socket> sockbuf;
    typedef basic_sockstream<socket> sockstream;
    typedef basic_sockmanager<SOCK_STREAM, AF_INET, 0> sockmanager;
};

Overview

tcp::socket は,サーバ/クライアント型モデルで TCP による通信を行う際に使用するソケットを生成するためのクラスです.tcp::socket は, サーバへ接続要求を送信して TCP コネクションを確立するまでの作業を担います. その後の実際のデータ転送は,tcp::sockstream(詳細は sockstreamを参照)を用いて行います.

Example

example_tcp_client.cpp

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

int main(int argc, char* argv[]) {
    if (argc < 3) std::exit(-1);
    
    try {
        clx::tcp::socket s;
        s.connect(argv[1], clx::tcp::port(argv[2]));
        clx::tcp::sockstream tcps(s);
        
        while (1) {
            std::string buf;
            std::cin >> buf;
            if (std::cin.eof()) break;
            tcps << buf;
        }
        s.close();
    }
    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;
}

サーバ側のサンプルプログラムについては,tcp::acceptor を参照して下さい (example_tcp_server.cpp).

Template Parameters

Family
プロトコルファミリーを指定します.

Related Types

typedef basic_sockaddress<Family, IPPROTO_TCP> address_type;
typedef char char_type;
typedef typename std::basic_string<char> string_type;

Construction and Member Functions

basic_socket();
basic_socket(const basic_socket& cp);
basic_socket(soket_int s, const address_type& addr);
basic_socket(const char_type* host, int port);
basic_socket(const string_type& host, int port);
virtual ~basic_socket() throw();

指定された引数を基にして新たな tcp::basic_socket を生成します. 引数にホスト名,およびポート番号が指定された場合は,指定された引数で connect() メソッドを実行します.connect() メソッドに関しては後述します.

basic_socket& connect(const char_type* host, int port);
basic_socket& connect(const string_type& host, int port);
bool is_connect() const;

引数に指定されたホスト名,およびポート番号でサーバと通信するための TCP ソケットを生成します.connect() メソッドは,まず始めに,引数にしていされたホスト名, およびポート番号を基にして新たな address_type を生成します.そして,次に address_type で指定されたサーバへの接続を試みます.adress_type の生成に失敗した場合は sockaddress_error, サーバへの接続に失敗した場合には socket_error をそれぞれ例外として送出します.

is_connect() メソッドは,tcp::basic_socket が既にサーバと接続しているかどうかを判定します.

const address_type& address() const;

接続しているサーバのアドレス情報を返します.address_type の詳細については, sockaddress を参照して下さい.

int send(const char_type* src, int n);
int send(const string_type& src);
int recv(char_type* src, int n);

サーバとデータの送受信を行うためのメソッドです.サーバとのデータ通信については, sockstream も参照して下さい.

Related Pages

  1. CLX C++ Libraries - tcp::acceptor
  2. CLX C++ Libraries - sockstream
  3. CLX C++ Libraries - sockmanager