6.100. kink/socket/TCP_SERVER

TCP/IP、またはUnixドメインソケットのリスニングソケットを提供する。

例

次のプログラムはTCP/IPのサーバとクライアントを立ち上げる。サーバはソケットオプションSO_REUSEADDRとSO_RCVBUFを設定する。クライアントはバイト列 [1, 2, 3] をサーバに送る。

6.100.1. tcp_server型

tcp_serverは、TCP/IP、またはストリームベースのUnix Domain Socketのリスニングソケットである。

6.100.1.1. Serv.bind_listen(Local ...[$config_fun={}])

bind_listenはローカルアドレスをリスニングソケットにひもづけ、ソケットを接続待ちモードにする。

コンフィグメソッド:

• C.backlog(Backlog): default = ランタイムのデフォルト

• C.on_success($success): default = {}

• C.on_error($error): default = {(:Exc) Exc.raise }

ソケットが接続待ちモードになった場合、bind_listenは引数なしで$successを末尾呼び出しする。

IOエラーが起きた場合、bind_listenは、exceptionを引数として$errorを末尾呼び出しする。

Backlogは、成立したがacceptされていない接続の最大数について、希望する値として使われる。

事前条件

Localは、socket_addressであり、そのプロトコルファミリがソケットに合致しなければならない。

Backlogは正の整数のnum値でなければならない。

$successはサンクでなければならない。

$errorはexceptionを引数に取る関数でなければならない。

6.100.1.2. Serv.accept(...[$config={}])

acceptメソッドはひとつの着信接続を受け入れる。

コンフィグメソッド:

• C.on_success($success): default = VAL.identity

• C.on_error($error): default = {(:Exc) Exc.raise }

• C.on_cancelled($cancelled): default = 例外を投げる関数

acceptメソッドは、接続が成立するか、IOエラーが起きるか、キャンセルされるまで待つ。

接続が成立した場合、acceptは、コネクティングソケットのtcp値を引数として$successを末尾呼び出しする。

IOエラーが起きた場合、acceptは、exceptionを引数として$errorを末尾呼び出しする。

キャンセルされた場合、acceptは引数なしで$cancelledを末尾呼び出しする

事前条件

ソケットは接続待ちモードでなければならない。

$successはtcpを引数に取る関数でなければならない。

$errorはexceptionを引数に取る関数でなければならない。

$cancelledはサンクでなければならない。

6.100.1.3. Serv.cancel_accept

cancel_acceptは、このリスニングソケットに対する、現在の、または次回のaccept操作をキャンセルする。

他のスレッドがaccept操作でブロックされていない場合、次回のacceptがキャンセルされる。

ひとつのスレッドがaccept操作でブロックされている場合、そのacceptの呼び出しがキャンセルされる。

複数のスレッドがaccept操作でブロックされている場合、そのうちのひとつがキャンセルされる。

6.100.1.4. Serv.close(...[$config={}])

closeはリスニングソケットを閉じる。

コンフィグメソッド:

• C.on_success($success): default = {}

• C.on_error($error): default = {(:Exc) Exc.raise }

ソケットが成功裏に閉じられた場合、closeは引数なしで$successを末尾呼び出しする。

IOエラーが起きた場合、closeはexceptionを引数として$errorを末尾呼び出しする。

事前条件

$successはサンクでなければならない。

$errorはexceptionを引数に取る関数でなければならない。

6.100.1.5. Serv.local_address(...[$config={}])

local_addressは、リスニングソケットのローカルアドレスのsocket_addressを取得する

コンフィグメソッド:

• C.on_success($success): default = VAL.identity

• C.on_error($error): default = {(:Exc) Exc.raise }

ローカルアドレスがある場合、local_addressはsocket_addressを引数として$successを末尾呼び出しする。

IOエラーが起きた場合、local_addressはexceptionを引数として$errorを末尾呼び出しする。

事前条件

$successはsocket_addressを引数に取る関数でなければならない。

$errorはexceptionを引数に取る関数でなければならない。

6.100.1.6. Serv.so_reuseaddr

so_reuseaddrは、SO_REUSEADDRオプションのbool値のrefを戻す。

For usage of socket options, see the example program at the beginning of this module.

事前条件

プロトコルファミリはipv4かipv6でなければならない。

6.100.1.7. Serv.so_rcvbuf

so_rcvbufは、SO_RCVBUFオプションの非負の整数のnum値のrefを戻す。

For usage of socket options, see the example program at the beginning of this module.

6.100.2. TCP_SERVER.open(...[Protocol_family=PROTOCOL_FAMILY.ipv6 $config={}])

openメソッドは新しくリスニングソケットを作る。

コンフィグメソッド:

• C.on_success($success): default = VAL.identity

• C.on_error($error): default = {(:Exc) Exc.raise }

• C.on_unsupported($unsupported): default = exceptionを引数として$errorを末尾呼び出しする関数

リスニングソケットが作られた場合、openは、リスニングソケットを表すtcp_serverを引数として$successを末尾呼び出しする。

IOエラーが起きた場合、openはexceptionを引数として$errorを末尾呼び出しする。

ランタイムがProtocol_familyをサポートしない場合、openは$unsupportedを引数なしで末尾呼び出しする。

事前条件

Protocol_familyはprotocol_family値でなければならない。

$successはtcp_serverを引数に取る関数でなければならない。

$errorはexceptionを引数に取る関数でなければならない。

6.100.3. TCP_SERVER.is?(Val)

is?はValがtcp_server値であるかどうかを戻す。