library socket

[edit]

要約

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

ソケットアドレス

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

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

ソケットアドレスを取り扱うための便利で高水準なクラスとして Addrinfo があります。

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 ライブラリも使用できます。

クラス

Addrinfo

ソケットのアドレス情報を保持するクラスです。

Socket::AncillaryData

BasicSocket#sendmsgBasicSocket#recvmsg で用いる ancillary data (補助データ、制御情報) を表すクラスです。

Socket::Option

BasicSocket#getsockoptBasicSocket#setsockopt で使うソケットオプションの値を表すクラス。

Socket::UDPSource

Socket.udp_server_loop で使われるアドレス情報を保持するクラスです。

BasicSocket

ソケットを表す抽象クラスです。具体的なソケット操作はサブクラスで定義されます。

  IPSocket

インターネットドメインソケットの抽象クラス。

   TCPSocket

インターネットドメインのストリーム型ソケットのクラスです。

    SOCKSSocket

TCPSocket を SOCKS(http://www.sw.nec.co.jp/middle/socks/) 対応したクラスです。

    TCPServer

TCP/IP ストリーム型接続のサーバ側のソケットのクラスです。

   UDPSocket

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

  Socket

汎用ソケットクラス。

  UNIXSocket

UNIX ドメインのストリーム型ソケットのクラス。

   UNIXServer

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

Socket::Ifaddr

getifaddrs(3) の結果を表すクラスです。

モジュール

Socket::Constants

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

例外クラス

SocketError

socket ライブラリに関する例外クラスです。