ソケットを表す抽象クラス。具体的なソケット操作はサブクラスで
定義されます。
例えばインターネットドメインの場合は
TCPsocket
を用います。
IO
getsockname
ソケットの情報を取得します。sockaddr構造体をパックした 文字列を返します。getsockname(2)を参照のこと。
getsockopt(level, optname)
ソケットのオプションを取得します。getsockopt(2) を参照のこと。取得したオプションのデータをパックした文字列を 返します。
getpeername
接続の相手先のソケットの情報を取得します。sockaddr構造体をパッ クした文字列を返します。getpeername(2)を参照の こと。
setsockopt(level, optname, optval)
ソケットのオプションを設定します。setsockopt(2) を参照のこと。
shutdown(how)
ソケットの以降の接続を終了させます。howが0である 時,以降の受信が,1である時は,以降の送信が拒否さます。 howが2の時には,それ以降の送信,受信ともに拒否さ れます。shutdown(2)を参照。
インターネットドメインのストリーム型ソケットのクラス。通常の
IO
クラスのサブクラスと同
様の入出力ができます。このクラスによってソケットを用いたクラ
イアントを簡単に記述できるようになります。ユーザの入力をその
ままサーバに転送するプログラムは以下のようになります。
require "socket" s = TCPsocket.open("localhost", 4444) while gets() s.write($_) print(s.read) end
BasicSocket
getaddress(host)
ホスト名からホストのアドレスを返します。ホストのアドレスは文 字列はoctet decimalの文字列(例:127.0.0.1)です。
open(host, service)
new(host, service)
hostで指定したホストのserviceで指定したポートと接続したソケッ トを返します。hostはホスト名,またはインターネッ トアドレスを示す文字列,serviceは /etc/services(またはNIS)に登録されているサービ ス名かポート番号です。
addr
ソケットの接続情報を表す配列を返します。配列の各要素は第1要 素が文字列 "AF_INET",第2要素がport番号,第3要素がホストを表 す文字列,第4要素がホストのIPアドレスを表す文字列(octet decimal)です。
peeraddr
接続相手先ソケットの情報を表す配列を返します。配列の各要素は
addr
メソッドが返す配列
と同じです。
TCP/IPストリーム型接続のサーバ側のソケットのクラス。このクラ スによって簡単にソケットを利用したサーバのプログラミングがで きます。例えばechoサーバは以下のようになります。
require "socket" gs = TCPserver.open(4444) socks = [gs] while TRUE nsock = select(socks) next if nsock == nil for s in nsock[0] if s == gs socks.push(s.accept) else if s.eof? s.close socks.delete(s) else str = s.gets s.write(str) end end end end
Thread
を使えばもっと短くなります。
require "socket" gs = TCPserver.open(0) addr = gs.addr addr.shift printf("server is on %d\n", addr.join(":")) while TRUE ns = gs.accept print(ns, " is accepted\n") Thread.start do s = ns # save to dynamic variable while s.gets s.write($_) end print(s, " is gone\n") s.close end end
TCPsocket
new([host, ]service)
open([host, ]service)
新しいサーバー接続をオープンします。serviceは /etc/services(またはNIS)に登録されているサービ ス名かポート番号で指定します。hostを指定した時は 指定したホストからの接続だけを受け付けます。省略時は全てのホ ストからの接続要求を受け付けることになります。
accept
クライアントからの接続要求を受け付け,接続した
TCPsocket
のインスタンスを返します。
UNIXドメインのストリーム型ソケットのクラス。通常の
IO
クラスのサブクラスと同様の
入出力ができます。
BasicSocket
open(path)
new(path)
pathで指定したパス名を用いて接続したソケットを返 します。
addr
ソケットの接続情報を表す配列を返します。配列の各要素は第1要 素が文字列 "AF_UNIX",第2要素がパスを表す文字列です。
path
UNIXソケットのパスを返します。
接続相手先ソケットの情報を表す配列を返します。配列の各要素は
addr
メソッドが返す配列
と同じです。
UNIXストリーム型接続のサーバ側のソケットのクラス。
UNIXsocket
accept
クライアントからの接続要求を受け付け,接続した
UNIXsocket
のインスタンスを返します.
ソケットそのものに対するシステムコールレベルのアクセスを提供 するクラス.Perlのソケットに対するアクセスと同レベルの機能を 提供してます.このクラスではソケットアドレスはpackされた文字 列で指定します.UDPソケットはこのクラスを使って利用します.
一般的なソケットプログラミングはより高レベルの
TCPsocet
クラスや
TCPserver
クラスを用い
て行われることが多く,このクラスはあまり用いられません.
BasicSocket
open(domain, type, protocol)
new(domain, type, protocol)
新しいソケットを生成します.domain,
type,protocolはインクルードファイルに
ある定数で指定します.ほとんどの定数はSocket
ク
ラスでクラス定数として定義されています.domainと
typeに関しては,文字列でも指定できますが,文字列
ですべてを機能を指定できる保証はありません.
pair(domain, type, protocol)
socketpair(domain, type, protocol)
相互に結合されたソケットのペアを含む2要素の配列を返します.
引数の指定はSocket.open
と同じです.
accept
新しい接続を受け付けて,新しい接続に対するソケットとアドレスの ペアを返します.accept(2)を参照.
bind(addr)
ソケットをaddrに結合します.bind(2) と同じ働きをします.addrはpackされたソケットアド レス構造体です.
connect(addr)
connect(2)と同じ働きをします.addrは packされたソケットアドレス構造体です.
gethostbyname(host)
ホスト名またはIPアドレス(整数または"127.0.0.1"
のような文字列)からホストの情報を返します.ホスト情報は,ホ
スト名,ホストの別名の配列,ホストのアドレスタイプ,ホストの
アドレスを各要素とする配列です.ホストのアドレスはpackされた
文字列で,unpack("CCCC")で分解できます.
gethostbyaddr(host)
ホスト名またはIPアドレス(整数または"127.0.0.1"
のような文字列)からホスト情報を返します.ホスト情報の構造は
gethostbynameと同じです.
getservbyname(service[, proto])
service, protoに対応するポート番号を返 します.protoの省略値は"tcp"です.
listen(backlog) ode>
listen(2)と同じ働きをします.
-
recv(len[, flags])
-
ソケットからデータを受け取り,文字列として返します.
lenは受け取る最大の長さを指定します.
flagsについてはrecv(2)を参照.flagsの
デフォルト値は0です.
-
recvfrom(len[, flags])
-
recv
と同様にソケットからデータを受け取りますが,
戻り値は文字列と相手ソケットのアドレスのペアです.引数につい
てはrecvと同様です.
-
send(mesg, flags[, to])
-
ソケットを介してデータを送ります.flagsに関しては
send(2)を参照してください.connect
していないソケットに対しては送り先であるtoを指定
する必要があります.実際に送ったデータの長さを返します.