CLX C++ Libraries
Home >> socket

Declaration

// socket_intとsocklen_typeのみグローバル名前空間で宣言
#ifdef CLX_WIN32
typedef SOCKET socket_int;
typedef int socklen_type;
#else
typedef int socket_int;
typedef socklen_t socklen_type;
#endif

template <
    int Type,
    int Family,
    int Protocol = 0
>
class basic_rawsocket;

class socket_error;

Overview

rawsocket は,ソケットのラッパクラスです.このクラスから各種ソケットクラス (udp::sockettcp::sockettcp::acceptoricmp::socket) へ派生します.現在は,POSIX および Winsock に対応しています.socket_error は, ソケットを用いた通信中に何らかのエラーが発生した場合に送出される例外です. ユーザには,errno に対応するエラーメッセージを知らせます.

Template Parameters

Type
ソケットタイプを指定します.
Family
プロトコルファミリーを指定します.
Protocl
プロトコルを指定します.デフォルト値は,0 (詳細は,Manpage of SOCKET を参照して下さい).

Construction and Member Functions

basic_rawsocket();
explicit basic_rawsocket(const basic_rawsocket& cp);
explicit basic_rawsocket(socket_int s);
virtual ~basic_rawsocket();

コンストラクタに引数が指定された場合,指定された引数で assign() メソッドを実行します. assign() メソッドに関しては後述します.

basic_rawsocket& assign(const basic_rawsocket& cp);
basic_rawsocket& assign(socket_int s);

引数に basic_rawsocket クラスが指定された場合は,同じソケットを共有する basic_rawsocket のコピーを生成します.ここで生成された 2 つの basic_rawsocket は同じソケットを共有する為,どちらか一方が close() メソッドを実行すると, もう片方の basic_rawsocket も通信が終了します.

引数に socket_int が指定された場合は,指定された引数を基に新たな basic_rawsocket を生成します.

virtual socket_int open();
virtual void close();

open() メソッドは,ソケット通信を行うための新たなソケットを取得し, そのソケットを基にして basic_rawsocket を初期化します.

close() メソッドは,ソケット通信を明示的に終了します. 前述したように,コピーコンストラクタなどを通じて複数の basic_rawsocket が 1 つのソケットを共有している場合,それらの basic_rawsocket の 1 つが close() メソッドを実行した時点で他の basic_rawsocket もそれ以上通信を行う事ができなくなります. 尚,close() メソッドを実行せずに終了した場合,同じソケットを共有している basic_rawsocket の中で最後に実行されたデストラクタによって通信が終了します.

socket_int socket() const;

ソケットを返します.この値は,ユーザがシステムコールを直接操作する場合に必要になります.

Related Pages

  1. CLX C++ Libraries - udp::socket
  2. CLX C++ Libraries - tcp::socket
  3. CLX C++ Libraries - tcp::acceptor
  4. CLX C++ Libraries - icmp::socket

References

  1. Manpage of SOCKET
  2. Manpage of ERRNO