Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > library socket

library socket

要約

socket はプロセス外部との通信 (プロセス間通信、ホスト間通信) を実現します。

クラス

モジュール

ソケットアドレス

ソケットというのは通信路の末端です。 たとえば 1対1 の通信では、まず通信路の両端にひとつずつソケットをつくり、 それらのソケットを接続することによって通信路が確立し、相互に通信できるようになります。 この接続時に、一方のソケットにもう一方のソケットの場所を教えてやる必要がありますが、 この場所を指定するものがソケットアドレスです。

ソケットアドレスはソケットの種類によって中身が異なります。 たとえば TCP では IP アドレスとポート番号ですし、 Unix ドメインソケットではソケットファイルを指すパス名です。

IPSocket および UNIXSocket 以下のクラス階層では、 わざわざソケットアドレスという形式にまとめなくてもよいよう、 ソケットアドレスの中身を直接扱えるメソッドが用意されています。

また、IPSocket 以下での IP アドレスとポート番号の指定は、 数値で表現するだけでなく、ホスト名やサービス名が使えます。 これについては以下の「ホスト指定形式」と「サービス指定形式」を参照してください。

また、C のレベルの「ソケットアドレス構造体を pack した文字列」も使用できます。 これは主に低レベルソケットインターフェース (Socket) で用いられます。

ホスト指定形式

AF_INET なソケットにおいてホストを指定するには以下のいずれか の形式を指定します。

サービス指定形式

サービスを指定するには以下のいずれかの形式を指定します。

ソケットアドレス構造体を pack した文字列

ソケットアドレス構造体とは、C 言語の構造体 struct sockaddr_in (IPv4) や struct sockaddr_un (Unix ドメイン)を指します。 Socket クラスなどソケットの低レベルインタフェースで利用されます。

Socket.pack_sockaddr_in, Socket.unpack_sockaddr_in といったメソッドにより、 例えば、以下のようにしてこの文字列を得ることが出来ます

require 'socket'
p Socket.pack_sockaddr_in("echo", "127.0.0.1")
=> "\002\000\000\a\177\000\000\001\000\000\000\000\000\000\000\000"

ホスト名と IP アドレスの変換

ホスト名から IP アドレスへの変換 (正引き) を行うメソッドは以下のものが用意されています。

逆に IP アドレスからホスト名への変換 (逆引き) を行うメソッドは以下のものが用意されています。

また、resolv ライブラリも使用できます。

クラスとモジュール

class BasicSocket

ソケットを表す抽象クラスです。具体的なソケット操作はサブクラスで 定義されます。 例えばインターネットドメインストリームソケットの場合は TCPSocket を用います。

class IPSocket

インターネットドメインソケットの抽象クラス。 通常の IO クラスのサブクラスと同様の入出力ができます。

class SOCKSSocket

TCPSocket を [[unknown:SOCKS|URL:http://www.sw.nec.co.jp/middle/socks/]] 対応したクラスです。

class Socket

ソケットそのものに対するシステムコールレベルのアクセスを提供 するクラス。Perl のソケットに対するアクセスと同レベルの機能を 提供してます。このクラスではソケットアドレスは Array#pack された文字列で指定します ([[m:socket#ソケットアドレス構造体を pack した文字列]]を参照)。

module Socket::Constants

ソケット操作の指定のための定数を定義したモジュール。このモジュー ルをインクルードすれば、定数 (AF_INETなど) を直接参照できます。

class TCPServer

TCP/IP ストリーム型接続のサーバ側のソケットのクラス。このクラ スによって簡単にソケットを利用したサーバのプログラミングがで きます。例えば echo サーバは以下のようになります。

class TCPSocket

インターネットドメインのストリーム型ソケットのクラス。通常の IO クラスのサブクラスと同 様の入出力ができます。このクラスによってソケットを用いたクラ イアントを簡単に記述できるようになります。ユーザの入力をその ままサーバに転送するプログラムは以下のようになります。

class UDPSocket

UDP/IPデータグラム型ソケットのクラス。

class UNIXServer

UNIXストリーム型接続のサーバ側のソケットのクラス。

class UNIXSocket

UNIX ドメインのストリーム型ソケットのクラス。通常の IO クラスのサブクラスと同様の 入出力ができます。

Classes

Sublibraries