socket はプロセス外部との通信 (プロセス間通信、ホスト間通信) を実現します。
ソケットというのは通信路の末端です。たとえば 1対1 の通信では、まず通信路の両端にひとつずつソケットをつくり、それらのソケットを接続することによって通信路が確立し、相互に通信できるようになります。この接続時に、一方のソケットにもう一方のソケットの場所を教えてやる必要がありますが、この場所を指定するものがソケットアドレスです。
ソケットアドレスはソケットの種類によって中身が異なります。たとえば TCP では IP アドレスとポート番号ですし、 Unix ドメインソケットではソケットファイルを指すパス名です。
ソケットアドレスを取り扱うための便利で高水準なクラスとして Addrinfo があります。
IPSocket および UNIXSocket 以下のクラス階層では、わざわざソケットアドレスという形式にまとめなくてもよいよう、ソケットアドレスの中身を直接扱えるメソッドが用意されています。
また、IPSocket 以下での IP アドレスとポート番号の指定は、数値で表現するだけでなく、ホスト名やサービス名が使えます。これについては以下の「ホスト指定形式」と「サービス指定形式」を参照してください。
また、C のレベルの「ソケットアドレス構造体を pack した文字列」も使用できます。これは主に低レベルソケットインターフェース (Socket) で用いられます。
AF_INET なソケットにおいてホストを指定するには以下のいずれかの形式を指定します。
サービスを指定するには以下のいずれかの形式を指定します。
ソケットアドレス構造体とは、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 アドレスからホスト名への変換 (逆引き) を行うメソッドは以下のものが用意されています。
また、resolv ライブラリも使用できます。
Addrinfo | ソケットのアドレス情報を保持するクラスです。 |
Socket::AncillaryData | BasicSocket#sendmsg や BasicSocket#recvmsg で用いる ancillary data (補助データ、制御情報) を表すクラスです。 |
Socket::Option | BasicSocket#getsockopt、BasicSocket#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 ライブラリに関する例外クラスです。 |