socket

ReferenceTOPKeywords

コマンド名

socket- TCPネットワーク接続を開始します。

構文

socket ?options? host port
socket -server command ?options? port

解説

このコマンドはネットワークソケットを開き、将来のread putsflush コマンドの呼び出しに用いられるチャネル識別子を返します。 現在ではTCPネットワークプロトコルだけがサポートされています。将来のリリースでは他のプロトコルもサポートされるかもしれません。 socket コマンドは-server スイッチが指定されるかどうかに応じて、接続のクライアントあるいはサーバー側のどちらか一方のオープンに使われます。

クライアントソケット

-serverオプションが指定されなければクライアント側の接続が開かれて、コマンドは読み書きの両方に用いられるチャネル識別子を返します。 port host は接続するポートを指定します。このポートで接続を受け入れているサーバがなければなりません。 port は整数のポー ト番号であり、host www.sunlabs.comのようなドメイン式の名前か、127.0.0.1のような数値的 なIPアドレスです。 コマンドが実行されているホストを参照するにはlocalhost を使います。

次のオプションも接続に関する付随的な情報を指定するために host の前に現れます。

-myaddr addr
Addrは、接続に使用するクライアント側のネットワー クインターフェースのドメイン式の名前か数字のIPアドレスを与えます。このオプションはクライアントマシンが複数のネットワークインターフェイスを持つときに有効です。 このオプションが省略されると、クライアント側のインターフェイスはシステムソフトウェアによって選択されます。

-myport port 
port は接続のクライアント側に使用される整数のポート番号(あるいは、ホストオペレーティングシステムにサポート または理解されたサービス名)を指定します。このオプションが省略されると、クライアントのポート番号はシステムソフトウェアでランダムに選択されます。

-async
-asyncオプションはクライアントソケットを非同期に接続させます。 ソケットは即作成されますが、socketの呼び出しが戻る時点では、まだサーバに接続していないかもしれないことを意味します。 その接続が成功したか失敗したか、確認される前にソケットでgets か  flush が行われたとき、ソケットがブロックモードにあると、オペレーションはその接続が成功するか失敗するか分かるまで待機します。 ソケットが非ブロックモードにあって、ソケットでgetsflush が接続が成功したか失敗したか確認される前に行われるとオペレーションは即制御を戻し、そのソケットでのfblocked は1を返します。

サーバソケット

-serverオプションが指定されるとアプリケーションはport (ホストオペレーティングシステムにサポートまた理解された整数またはサービス名)で与えられたポートのサーバになります。 Tclは自動的に与えられたポートのクライアントからの接続を受け入れます。 各接続に対して、Tclはクライアントとの通信に使われる新しいチャネルを作成します。 Tclはそれから3つの追加的な引数と共にcommand を呼び出します。 新しいチャネル名と、ネットワークアドレス記法によるクライアントホストのアドレス、そしてクライアントのポート番号です。

次の追加的なオプションもhost の前に指定されることができます。

-myaddr addr
Addrは、接続に使用するサーバ側のネットワー クインターフェースのドメイン式の名前か数字のIPアドレスを示します。このオプションはサーバマシンが複数のネッ トワークインターフェイスを持つときには有効です。このオプションが省略されると、サーバソケットは特別なアドレス INADDR_ANYにバインドされるため、いかなるインターフェイスからでも接続できます。

サーバのチャネルは入出力には使われることができません。 唯一の使い方は新しいクライアントの接続を受け入れることです。 やってきた各クライアン ト接続のために作られたチャネルは入出力のために開かれます。 サーバチャネルを閉じることはサーバを閉鎖し、 新しい接続は受け入れられなくなりますが、既に存在する接続は影響されません。

サーバソケットにおいて、いつ新しい接続がオープンされるかを確認する手法はTclイベントメカニズムに依存しています。 アプリケーションが、vwaitコマンドやC関数Tcl_DoOneEventの呼び出しといったイベントループに入らないかぎり、 いかなる接続も受け入れられません。

port がゼロと指定されると、オペレーティングシステムはサーバソケットとして未使用のポートを割り当てます。 下述の-socknameオプションを検索するために fconfigureコマンドを使って、実際に割り当てられたポート番号は作成されたサーバソケット から取り出されます。

構成オプション

fconfigureコマンドはソケットチャネルに対して、いくつかの読取り専用の構成オプションを取得するために使用できます。

-error
このオプションは与えられたソケットの現在のエラー状態を取得します。これはある非同期接続操作が成功かを判断する時に役に立ちます。 エラーがあった場合、エラーメッセージが返されます。エラーがなければ空文字列が返されます。

-sockname
このオプションはソケットのアドレスとホスト名とポート番号の3つの要素のリストを返します。ホスト名が判断できない場合、 2つ目の要素はリストの1つ目の要素であるアドレスと同じです。

 
-peername
このオプションはサーバソケットでサポートされていません。クライアントでのみ、受信ソケットに対して、このオプションは3つの要素のリストを返します。 内容はアドレス、ホスト名、仲間ソケッ トが接続あるいはバインドするポートです。ホスト名が判断できない場合、リストの2つ目の要素は1つ目の要素であるアドレスと同じです。

参照

flush, open, read

キーワード

bind, channel, connection, domain name, host, network address, socket, tcp


Copyright © 1996 Sun Microsystems, Inc. Copyright © 1998-1999 by Scriptics Corporation. Copyright © 1995-1997 Roger E. Critchlow Jr.