Ruby 1.9.3 リファレンスマニュアル > ライブラリ一覧 > socketライブラリ > SOCKSSocketクラス

class SOCKSSocket + TCPSocket + IPSocket

クラスの継承リスト: SOCKSSocket < TCPSocket < IPSocket < BasicSocket < IO < Enumerable < File::Constants < Object < Kernel < BasicObject

要約

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

特異メソッド

getaddress(host) -> String [redefined by resolv-replace]

IPSocket.getaddress を置きかえ、 resolv ライブラリを使い名前解決します。

[PARAM] host:
ホスト名を指定します。
[EXCEPTION] SocketError:
名前解決に失敗した場合に発生します。
getaddress(host) -> String

ホスト名からホストのアドレスを返します。ホストのアドレスは文 字列は octet decimal の文字列 (例: 127.0.0.1) です。

[PARAM] host:
ホスト名を文字列で指定します。

例:

p IPSocket.getaddress("www.ruby-lang.org")        #=> "210.163.138.100"
gethostbyname(host) -> Array

ホスト名または IP アドレス (整数または"127.0.0.1" のような文字列)からホストの情報を返します。ホスト情報は、ホ スト名、ホストの別名の配列、ホストのアドレスタイプ、ホストの アドレスを各要素とする配列です。ホストのアドレスは octet decimal の文字列 ("127.0.0.1"のような文字列) です。

[PARAM] host:
ホスト名または IP アドレス (整数または"127.0.0.1" のような文字列)を指定します。
[RETURN]
ホスト名、ホストの別名の配列、ホストのアドレスタイプ、ホストのアドレスを各要素とする配列を返します。

例:

p TCPSocket.gethostbyname("www.ruby-lang.org")
#=> ["beryllium.ruby-lang.org", [], 2, "210.163.138.100"]
new(host, serv) -> SOCKSSocket [redefined by resolv-replace]

SOCKSSocket.newのパラメータ host の名前解決に resolv ライブラリを使います。

[PARAM] host:
ホスト名を文字列で指定します。
[PARAM] serv:
ホスト名を文字列で指定します。
[EXCEPTION] SocketError:
名前解決に失敗した場合に発生します。
open(host, service) -> SOCKSSocket
new(host, service) -> SOCKSSocket

host で指定したホストの service で指定したポートと接続したソケッ トを返します。host はホスト名、または octet decimal によるインターネットアドレスを示す文字列、service は /etc/services (または NIS) に登録されているサー ビス名かポート番号です。

[PARAM] host:
ホスト名、または octet decimal によるインターネットアドレスを示す文字列を指定します。
[PARAM] service:
/etc/services (または NIS) に登録されているサービス名かポート番号です。
open(host, serv, local_host=nil, local_service=nil) -> TCPSocket [redefined by resolv-replace]
new(host, serv, local_host=nil, local_service=nil) -> TCPSocket [redefined by resolv-replace]

TCPSocket.new のパラメータ host と local_host の名前解決に resolv ライブラリを使います。

[PARAM] host:
ホスト名、または octet decimal によるインターネットアドレスを示す文字列を指定します。
[PARAM] service:
/etc/services (または NIS) に登録されているサービス名かポート番号を指定します。
[PARAM] local_host:
ホスト名、または octet decimal によるインターネットアドレスを示す文字列を指定します。
[PARAM] local_service:
/etc/services (または NIS) に登録されているサービス名かポート番号を指定します。
[EXCEPTION] SocketError:
名前解決に失敗した場合に発生します。
open(host, service, local_host=nil, local_service=nil) -> TCPSocket
new(host, service, local_host=nil, local_service=nil) -> TCPSocket

host で指定したホストの service で指定したポートと接続したソケッ トを返します。host はホスト名、または octet decimal によるインターネットアドレスを示す文字列、service は /etc/services (または NIS) に登録されているサー ビス名かポート番号です。

引数 local_host, local_service を指定した場合、そのアドレス に対して bind(2) します。

[PARAM] host:
ホスト名、または octet decimal によるインターネットアドレスを示す文字列を指定します。
[PARAM] service:
/etc/services (または NIS) に登録されているサービス名かポート番号を指定します。
[PARAM] local_host:
ホスト名、または octet decimal によるインターネットアドレスを示す文字列を指定します。
[PARAM] local_service:
/etc/services (または NIS) に登録されているサービス名かポート番号を指定します。

インスタンスメソッド

addr -> Array

ソケットの接続情報を表す配列を返します。配列の各要素は第1要 素が文字列 "AF_INET", "AF_INET6" など、第2要素が port 番号、第3要素がホストを表 す文字列、第4要素がホストの IP アドレスを表す文字列 (octet decimal や hexadecimal) です。

[EXCEPTION] Errno::EXXX:
getsockname(2) が 0 未満の値を返した場合に発生します。

例:

serv = TCPServer.new("localhost", 0)
p serv.addr         #=> ["AF_INET", 46102, "localhost.localdomain", "127.0.0.1"]
c = TCPSocket.new(*serv.addr.values_at(3,1))
s = serv.accept
close -> nil

ソケットを閉じます。

peeraddr -> Array

接続相手先ソケットの情報を表す配列を返します。配列の各要素は IPSocket#addr メソッドが返す配列 と同じです。

[EXCEPTION] Errno::EXXX:
getpeername(2) が 0 未満の値を返した場合に発生します。

例:

TCPSocket.open("localhost", "http") {|s|
  p s.peeraddr    #=> ["AF_INET", 80, "localhost.localdomain", "127.0.0.1"]
  p s.addr        #=> ["AF_INET", 52615, "localhost.localdomain", "127.0.0.1"]
}
recvfrom(maxlen, flags = 0) -> Array

recv と同様にソケットからデータを受け取りますが、 戻り値は文字列と相手ソケットのアドレス (形式は IPSocket#addr 参照) のペアです。引数につ いては BasicSocket#recv と同様です。

[PARAM] maxlen:
受け取る文字列の最大の長さを指定します。
[PARAM] flags:
recv(2) を参照してください。
[EXCEPTION] IOError:
[EXCEPTION] Errno::EXXX:
recvfrom(2) がエラーになった場合などに発生します。

例:

s1 = UDPSocket.new
s1.bind("0.0.0.0", 0) # 適当に空いている port を割り当てる
s2 = UDPSocket.new
s2.send("foo", 0, s1.getsockname)
mesg, inet_addr = s1.recvfrom(100)
p mesg            #=> "foo"
p inet_addr       #=> ["AF_INET", 32876, "localhost.localdomain", "127.0.0.1"]
class SOCKSSocket