Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > library socket
library socket
要約
socket はプロセス外部との通信 (プロセス間通信、ホスト間通信) を実現します。
クラス
- BasicSocket: ソケットを表す抽象クラス
- IPSocket: インターネットドメインソケットの抽象クラス
- TCPSocket: インターネットドメインのストリーム型ソケットのクラス
- TCPServer: TCP/IPストリーム型接続のサーバ側のソケットのクラス
- SOCKSSocket: TCPSocket を SOCKS 対応したクラス
- UDPSocket: インターネットドメインのデータグラム型ソケットのクラス
- UNIXSocket: Unixドメインのストリーム型ソケットのクラス
- UNIXServer: Unixストリーム型接続のサーバ側のソケットのクラス
- Socket: 低レベルソケットインターフェース
モジュール
ソケットアドレス
ソケットというのは通信路の末端です。 たとえば 1対1 の通信では、まず通信路の両端にひとつずつソケットをつくり、 それらのソケットを接続することによって通信路が確立し、相互に通信できるようになります。 この接続時に、一方のソケットにもう一方のソケットの場所を教えてやる必要がありますが、 この場所を指定するものがソケットアドレスです。
ソケットアドレスはソケットの種類によって中身が異なります。 たとえば TCP では IP アドレスとポート番号ですし、 Unix ドメインソケットではソケットファイルを指すパス名です。
IPSocket および UNIXSocket 以下のクラス階層では、 わざわざソケットアドレスという形式にまとめなくてもよいよう、 ソケットアドレスの中身を直接扱えるメソッドが用意されています。
また、IPSocket 以下での IP アドレスとポート番号の指定は、 数値で表現するだけでなく、ホスト名やサービス名が使えます。 これについては以下の「ホスト指定形式」と「サービス指定形式」を参照してください。
また、C のレベルの「ソケットアドレス構造体を pack した文字列」も使用できます。 これは主に低レベルソケットインターフェース (Socket) で用いられます。
ホスト指定形式
AF_INET なソケットにおいてホストを指定するには以下のいずれか の形式を指定します。
- ホスト名 (例: "localhost")
- octet decimalによるIPアドレス(文字列) (例: "127.0.0.1")
- 空文字列 (""), 文字列 "<any>" - INADDR_ANYに相当
- 文字列 "<broadcast>" - INADDR_BROADCASTに相当
- IPアドレスを表す 32bit の整数 (例: 0x7f000001)
サービス指定形式
サービスを指定するには以下のいずれかの形式を指定します。
- ポート番号(整数または文字列) (例: 21, "21")
- サービス名 (例: "ftp")
ソケットアドレス構造体を 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 アドレスへの変換 (正引き) を行うメソッドは以下のものが用意されています。
- IPSocket.getaddress("www.ruby-lang.org") => "210.163.138.100"
- TCPSocket.gethostbyname("www.ruby-lang.org") => ["beryllium.ruby-lang.org", [], 2, "210.163.138.100"]
- Socket.gethostbyname("www.ruby-lang.org") => ["beryllium.ruby-lang.org", [], 2, "\322\243\212d"]
- Socket.getaddrinfo("www.ruby-lang.org", "http") => [["AF_INET", 80, "beryllium.ruby-lang.org", "210.163.138.100", 2, 1, 6]]
逆に IP アドレスからホスト名への変換 (逆引き) を行うメソッドは以下のものが用意されています。
- Socket.getnameinfo([nil, nil, nil, "210.163.138.100"]) => ["beryllium.ruby-lang.org", 0]
また、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 クラスのサブクラスと同様の 入出力ができます。 |