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 クラスなどソケットの低レベルインタフェースで利用されます。

ruby 1.7 feature: 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"

また、ruby 1.6 以前では、以下のように pack を使用できます。

require 'socket'
p [Socket::AF_INET,
   Socket.getservbyname('echo'),
   127, 0, 0, 1].pack("s n C4 x8")
=> "\002\000\000\a\177\000\000\001\000\000\000\000\000\000\000\000"

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

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

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

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



rubyist ML