[ 前のページ ] [ 次のページ ] [ 目次 ] [ DOC Home ]


4 TELNETポート・ドライバQIOインタフェース

TELNETポート・ドライバ(TNDRIVER)は,RAW,NVT,RLOGINおよびTELNETプロトコルを使用して,TCP/IP ストリーム接続のためのターミナル・セッション・ サポートを提供します。接続のリモート側には,リモート・デバイスとアプリケーションのどちらが存在していてもかまいません。

ユーザ・プログラムは,IO$_TTY_PORTおよびIO$_TTY_PORT_BUFIO機能コードを使用して, 標準のOpenVMS $QIOシステム・サービスを通してTELNET接続を管理することができます。 本章ではこれらの機能コードとその引数について説明します。

4.1 インタフェースの定義

インタフェースは以下の定義を使用しています。シンボルはSYS$LIBRARY:TNIODEF.H に定義されています。

以下の表は,このインタフェースで使用される各種のリテラルを示しています。

4.1.1 項目リスト・コード

表 4-1 p5項目リスト・コード

項目コード 最大サイズ 説明
TN$_ACCPORNAM 64 アクセス・ポート名文字列。書き込みの際, 文字列の長さはitem_lengthフィールドによって決定されます。item_length は63バイト以下でなければなりません。読み込みの際, 文字列は.ASCIZ形式(最初のバイトに文字列の長さが格納されている) で返されるので,64バイトのサイズが適しています。
TN$_CHARACTERISTICS 4 特性マスク。このロングワードは,読み込みまたは書き込みを行うデバイスの特性のビットマスクを含んでいます。 表 4-2を参照。
TN$_CONNECTION_ATTEMPTS 4 (再)接続の試み。この項目は,再接続可能なデバイスに対して試みて失敗した再接続の回数です。 接続に成功すると, この値は初期化されます。この項目は読み込み専用です。
TN$_CONNECTION_INTERVAL 4 (再)接続の試みが行われるまでの時間の最小値( 秒単位)。
TN$_CONNECTION_ TIMEOUT 4 最後の(再)接続の試みからの経過時間( 秒単位)。この項目は読み込み専用です。
TN$_DATA_HIGH 4 ネットワーク・ ポートでバッファに格納される出力データの最大量(バイト単位) 。この値は,ソケット内でバッファに格納されるデータの量には影響を与えません。
TN$_DEVICE_ UNIT 4 ターミナル・デバイス・ ユニット番号。書き込みの際,この値は1〜9999の範囲でなければなりません。
TN$_IDLE_INTERVAL 4 接続の切断が行われるまでのアイドル時間の最大値( 秒単位)。デバイスがストールしている場合,接続は切断されません。
TN$_IDLE_TIMEOUT 4 最後にターミナルに対して出力が行われてからの経過時間( 秒単位)。この項目は読み込み専用です。
TN$_LOCAL_ADDRESS 32 アクティブな接続のローカルなsockaddr。書き込みの際には,item_length がsockaddrのサイズを決定します。 sockaddrは,sockaddrサイズ・フィールドを含んでいるBSD 4.4 形式であることに注意してください(Cプログラムは_ SOCKADDR_LENシンボルを定義してコンパイルする必要があります)。この項目は読み込み専用です。
TN$_NETWORK_ DEVICE_NAME 64 現在ターミナルにバインドされているネットワーク・ デバイスの名前。読み込みの際, 文字列は.ASCIZ形式(最初のバイトに文字列の長さが格納されている) で返されます。この項目は読み込み専用です。
TN$_PROTOCOL 4 セッション・ プロトコル。表 4-3を参照。
TN$_REMOTE_ADDRESS 32 アクティブな接続のリモート・ピアのsockaddr 。sockaddrは,sockaddrサイズ・フィールドを含んでいるBSD 4.4 形式であることに注意してください。sockaddrのサイズは, このフィールドをもとに決定されます。この項目は読み込み専用です。
TN$_SERVICE_TYPE 4 ターミナル・サービスのクラス。表 4-4 を参照。
TN$_STATUS 4 現在のデバイスおよびセッション・ ステータス。この項目は読み込み専用です。

4.1.2 特性マスク・ビット

表 4-2 特性マスク・ビット

特性 説明
TN$M_ AUTOCONNECT 自動接続タイプ・デバイス。
TN$M_LOGIN_ON_DASSGN TELNETデバイスが割り当て解除されたときにログインを開始します。 この特性では, BYPASSまたはSYSNAM特権が必要です。
TN$M_ PERMANENT_UCB TELNETデバイスは明示的に削除されるまで存在し続けます。
TN$M_RETAIN_ON_ DASSGN TELNETデバイスは,このデバイスに対する最後のチャネルの割り当て解除の際にも削除されません。 この条件は,最後の割り当て解除の際にクリアされ, その後に割り当てと割り当て解除が行われるとデバイスが削除されます。

4.1.3 プロトコル・タイプ

表 4-3 プロトコル・タイプ・コード

プロトコル・タイプ 説明
TN$K_PROTOCOL_UNDEFINED このセッションには明示的なプロトコルがありません。 データは解釈なしにソケット上で送受信されます。 これはraw接続です。
TN$K_PROTOCOL_NVT Network-Virtual-Terminalプロトコル。 このプロトコルは基本的なセッション制御は理解しますが, TELNETプロトコルに存在するオプション・ネゴシエーションは含んでいません。
TN$K_PROTOCOL_RLOGIN BSD Remote Loginプロトコル。この単純なプロトコルは,ある程度の特殊制御文字サポートを提供しますが,NVT およびTELNETプロトコルのアーキテクチャからの独立性はありません。
TN$K_PROTOCOL_TELNET TELNETプロトコル。TELNET は,基本的なNVTプロトコルに加え,オプション・ネゴシエーションをサポートします。 これにより,参加しているクライアントとサーバの種類に応じてターミナル・ セッションを拡張することができます。

4.1.4 サービス・タイプ

表 4-4 サービス・タイプ・コード

サービス・タイプ 説明
TN$K_SERVICE_NONE サービス・タイプは現時点では不明です。
TN$K_SERVICE_ INCOMING サービスは着信接続です。
TN$K_SERVICE_OUTGOING サービスは発信接続です。

4.2 IO$_TTY_PORT

IO$_TTY_PORT機能は,ターミナル・ドライバを通してTELNETポート・ドライバに$QIO パラメータを渡すために使用されます。実際のサブ機能はオプション・ マスクとしてコード化され,以下の選択肢があります。

4.2.1 IO$_TTY_PORT|IO$M_TN_STARTUP

ソケットをTELNETターミナルにバインドします。

このサブ機能は,作成された(接続済みの)ソケットをTELNETターミナル・ デバイスにバインドします。

引数

p1
   VMS用法:   channel_number
   データ型:  word (unsigned)
   アクセス:  読み込み専用
   受け渡し方:値による
p1引数は,TELNETセッションを確立するソケットのチャネル番号を含んでいます。
p2
   VMS用法:   protocol_number
   データ型:  longword (unsigned)
   アクセス:  読み込み専用
   受け渡し方:値による
p2引数は,プロトコル選択を含んでいます。
p3
   VMS用法:   characteristics_mask
   データ型:  longword (mask)
   アクセス:  読み込み専用
   受け渡し方:値による
p3引数は,接続に適用される特性のマスクを指定します。

説明

IO$M_TN_STARTUPサブ機能により,アプリケーションはターミナル・ ドライバQIOインタフェースを使って,ソケット上で通信を行うことができます。 着信データと発信データはターミナル・ドライバによって処理されるので, ターミナルの特性がデータの形式に影響を与える可能性があるという点に注意してください。 省略時の設定では,ターミナルは着信したデータを送信元にエコーします。

このサブ機能が完了すると,アプリケーションはその接続上ですべてのターミナルQIO 機能を実行することができます。ソケットがターミナル・ デバイスにバインドされている場合には,IO$_READxBLK機能もIO$_ WRITExBLK機能も処理せず,エラーSS$_DEVINUSEを返します。

返される条件値

SS$_IVCHAN プログラミング・エラー。 指定されたchannel_numberは有効ではありません。
SS$_IVMODE プログラミング・エラー。channel_number のアクセス・モードには,ターミナルのチャネルのアクセス・ モードよりも高い特権が与えられています。
SS$_NOPRIV プログラミング・エラー。 BYPASSまたはSYSPRV特権がないのに,USERまたはSUPERVISORモードのQIO で,characteristics_maskにTN$M_LOGIN_ON_DASSGN特性が指定されていました。
SS$_NOTNETDEV プログラミング・エラー。指定されたchannel_numberは非BGデバイスに割り当てられています。
SS$_ PROTOCOL プログラミング・エラー。指定されたprotocol_number が有効でないか,またはインターネット・ネットワークが使用できません。

4.2.2 IO$_TTY_PORT|IO$M_TN_SHUTDOWN

ソケットをTELNETターミナルからバインド解除します。

このサブ機能は,それまでバインドされていたソケット・ターミナル接続をバインド解除します。

引数

p1
   VMS用法:   channel_number
   データ型:  word (unsigned)
   アクセス:  読み込み専用
   受け渡し方:値による
p1引数は,TELNETセッションを確立するソケットのチャネル番号を含んでいます。

説明

IO$M_TN_SHUTDOWNサブ機能により,アプリケーションはそれまでバインドされていた(IO$M_TN_STARTUP で作成された)ソケット・ターミナル接続を切断することができます。channel_number は,そのソケット・ターミナル接続で, 同じネットワーク・デバイスに対して割り当てられていたものでなければなりません。

完了時に,アプリケーションは接続とTELNETターミナルへの割り当てを保持していますが, 両者の間の関連付けはなくなります。そのソケット・チャネルに対するIO$_READxBLK またはIO$_WRITExBLK機能を実行しても,エラーSS$_DEVINUSE は返されません。

返される条件値

SS$_IVCHAN プログラミング・エラー。 指定されたchannel_numberは有効ではありません。
SS$_IVMODE プログラミング・エラー。 channel_numberのアクセス・モードには,ターミナルのチャネルのアクセス・ モードよりも高い特権が与えられています。
SS$_NOTNETDEV プログラミング・エラー。指定されたchannel_number は非BGデバイスに割り当てられています。
SS$_DEVREQERR プログラミング・エラー。channel_number 上のデバイスは,ソケット・ターミナル接続のデバイスにマッチしません。

4.3 IO$_TTY_PORT_BUFIO

IO$_TTY_PORT_BUFIO機能は,ターミナル・ドライバを通してTELNETポート・ ドライバに$QIOパラメータを渡すために使用されます。IO$_TTY_ PORT_BUFIOは,一部のサブ機能がターミナル・デバイスへのパラメータの読み書きのために, バッファ処理された項目リストを受け付けるという点で,IO$_TTY_PORT と異なっています。

IO$_TTY_PORT_BUFIOのサブ機能は,入出力のための項目リストを受け付けます。 この項目リストは次の形式です。

      31         16 15          0
     +------+------+------+------+
     |  item_code  | item_length |   \
     +------+------+------+------+    > Item 1
     |       item_address        |   /
     +------+------+------+------+
     /                           /   \
     /                           /    > Item(s) 2..n
     /                           /   /
     +------+------+------+------+
     |      0      |      0      |  End of list
     +------+------+------+------+

項目リストは,ゼロのitem_codeとitem_lengthで終わります。

IO$_TTY_PORT_BUFIOのサブ機能は1つのQIOにまとめることができます。たとえば,IO$M_TN_SETMODE とIO$M_TN_CONNECTを組み合わせることで,デバイスのパラメータを設定した後に, 接続の作成を試みることができます。

サブ機能は次の順序で実行されます。

  1. IO$M_TN_SETMODE

  2. IO$M_TN_CONNECT

  3. IO$M_TN_SENSEMODE

  4. IO$M_TN_DISCON

注意
一部の項目は読み込み専用(IO$M_TN_SENSEMODE) であり,書き込み(IO$_M_TN_SETMODE)はできません。 通常このような項目の書き込みを試みると,エラーSS$_BADATTRIB が発生します。しかし,setmode/sensemodeの組み合わせを実行した場合(IO$M_TN_SENSEMODE|IO$M_TN_SETMODE) ,これらの項目はエラーを発生 させません。その代わりに,項目は,IO$M_TN_SETMODEの処理では無視され,QIO はIO$M_TN_SENSEMODEの処理を続行して,その項目が指定している情報を返します。

4.3.1 IO$_TTY_PORT_BUFIO|IO$M_TN_SENSEMODE

デバイス・パラメータを読み込みます。

引数

p5
   VMS用法:   item_list
   データ型:  読み込み専用
   アクセス:  参照による
   受け渡し方:
p5引数は,デバイスから読み込む情報の要約を含んでいる項目リスト( 前述)のアドレスです。

説明

IO$_TTY_PORT_BUFIOのIO$M_TN_SENSEMODEサブ機能は,デバイスに関連付けられているパラメータを読み込むために使用されます。

返される条件値

SS$_BADATTRIB プログラミング・エラー。 リスト内の項目コードは無効です。これの原因としては,そのコード, 読み込み専用パラメータを書き込もうとした,またはサイズが不適切であるなどが考えられます。 項目のバッファのアドレスは,I/Oステータス・ ブロックの第2のロングワードに返されます。
SS$_IVBUFLEN プログラミング・エラー。指定された項目の長さは許容されません。 項目のバッファのアドレスは,I/O ステータス・ブロックの第2のロングワードに返されます。
SS$_NOPRIV プログラミング・エラー。 要求側が持っていない特権を必要とする項目が項目リスト内に存在します。 項目のバッファのアドレスは,I/Oステータス・ブロックの第2のロングワードに返されます。

4.3.2 IO$_TTY_PORT_BUFIO|IO$M_TN_SETMODE

デバイス・パラメータを書き込みます。

引数

p5
   VMS用法:   item_list
   データ型:  読み込み専用
   アクセス:  参照による
   受け渡し方:
p5引数は,デバイスに書き込む情報の要約を含んでいる項目リスト( 前述)のアドレスです。

説明

IO$_TTY_PORT_BUFIOのIO$M_TN_SETMODEサブ機能は,デバイスに関連付けられているパラメータを書き込むために使用されます。

返される条件値

SS$_BADATTRIB プログラミング・エラー。 リスト内の項目コードは無効です。これの原因としては,コード自体の問題, 読み込み専用パラメータを書き込もうとした,またはサイズが不適切であるなどが考えられます。 項目のバッファのアドレスは,I/O ステータス・ブロックの第2のロングワードに返されます。
SS$_DUPLNAM プログラミング・エラー。 デバイスのユニット番号をTN$_DEVICE_UNIT項目を通して設定しようとする試みが, 指定されたユニット番号がすでに存在していたために失敗しました。
SS$_IVBUFLEN プログラミング・ エラー。指定された項目の長さは許容されません。項目のバッファのアドレスは,I/O ステータス・ブロックの第2のロングワードに返されます。
SS$_NOPRIV プログラミング・エラー。要求側が持っていない特権を必要とする項目が項目リスト内に存在します。 項目のバッファのアドレスは,I/Oステータス・ ブロックの第2のロングワードに返されます。


[ 前のページ ] [ 次のページ ] [ 目次 ] [ DOC Home ]