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