t_connect() - 別のトランスポート・ユーザーとの接続の確立

標準

標準/拡張機能 C/C++ 依存項目
XPG4.2 両方  

形式

#define _XOPEN_SOURCE_EXTENDED 1
#include <xti.h>

int t_connect(int fd, struct t_call *call, struct t_call *rcvcall);

機能説明

トランスポート・ユーザーは、指定の宛先トランスポート・ユーザーに対する接続を要求できます。この関数は、T_IDLE 状態でのみ発行できます。パラメーター fd は、通信が確立されるローカル・トランスポート終点を識別します。一方、sndcallrcvcall は、次のメンバーを含む t_call 構造体を指します。
        struct netbuf   addr;
        struct netbuf   opt;
        struct netbuf   udata;
        int             sequence;
パラメーター sndcall はトランスポート提供者が接続を 確立するために必要な情報を指定し、rcvcall は新規に 確立された接続に関連している情報を指定します。

sndcall では、addr は 宛先トランスポート・ユーザーのプロトコル・アドレスを 指定します。opt は、トランスポート提供者が必要とする プロトコル固有の情報を表示します。udata は、接続の確立時に宛先トランスポート・ユーザー に渡せるオプションのユーザー・データを指します。sequence は、この関数に対して意味はありません。

戻り時の rcvcall では、addr には 応答トランスポート終点に関連したプロトコル・アドレスが含まれて います。opt は、接続に関連したプロトコル特定の情報を 表示します。udata は、接続の確立時に宛先トランスポート・ユーザー が戻せるオプションのユーザー・データを指します。sequence は、この関数に対して意味はありません。

opt 引数によって、ユーザーはトランスポート提供者に 渡せるオプションを定義できます。t_optmgmt() のサポートされたオプションに関する説明を 参照してください。ユーザーは、optlen フィールドをゼロに 設定して、プロトコル・オプションをネゴシエーションしないように 選択できます。この場合には、提供者はデフォルト・オプションを使用できます。

デフォルト・オプションを使用した場合には、sndcall->opt.buf は、対応するオプションを使用してバッファーを指し示す必要があります。rcvcall->addrrcvcall->opt によって指された netbuf 構造体の maxlen フィールドと buf フィールドは、呼び出し前に設定する必要があります。

接続要求でユーザー・データを渡すことは TCP では サポートされていないので、udata 引数は常に 無意味です。

戻り時には、rcvcalladdropt、および udata フィールドは、接続に関連した値を反映するように更新されます。したがって、各引数の maxlen フィールドは、それぞれの バッファーの最大サイズを示すためにこの関数を発行する前に 設定する必要があります。しかし、rcvcall は NULL ポインターになることが あります。この場合は、t_connect() からの戻り時に情報は ユーザーに提供されません。

デフォルトでは、t_connect() は、同期モードで実行し、制御をローカル・ユーザーに戻す前に宛先ユーザーの応答を待ちます。正常に戻ること (すなわち、戻り値がゼロ) は、要求された接続が確立されていることを意味します。しかし、O_NONBLOCK が設定された (t_open() または fcntl() を使用して) 場合には、t_connect() は、非同期モードで実行します。この場合には、呼び出しはリモート・ユーザーの応答を待機しませんが、即時に制御をローカル・ユーザーに戻し、-1 を戻し、t_errnoTNODATA に設定して、接続がまだ 確立されていないことを示します。この方法で、関数は、接続要求を宛先トランスポート・ユーザーに 送信して、接続確立プロシージャーを簡単に開始します。要求された接続の状況を判別するために、t_rcvconnect() 関数は t_connect() と一緒に使用されます。

同期 t_connect() 呼び出しがシグナルによって妨害されると、対応するトランスポート終点の状態が T_OUTCON になり、t_rcvconnect()、t_rcvdis()、または t_snddis() のさらなる呼び出しが 許可されます。

有効状態: T_IDLE

戻り値

正常に実行された場合、t_connect() は 0 を戻します。

正常に実行されなかった場合、t_connect() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
TACCES
ユーザーは、指定されたアドレスまたはオプションを使用する 許可をもっていません。
TADDRBUSY
このトランスポート提供者は、同じローカル・アドレスと リモート・アドレスをもつ複数の接続をサポートしません。このエラーは、接続が既に存在していることを示しています。
TBADADDR
指定されたプロトコル・アドレスは正しくない形式であったか、あるいは無許可の情報が含まれていました。
TBADDATA
指定されたユーザー・データ量は、トランスポート提供者が 許可した範囲内に入っていませんでした。
TBADF
指定されたファイル記述子は、トランスポート終点を 指していません。
TBADOPT
指定されたプロトコル・オプションは正しくない形式であったか、あるいは無許可の情報が含まれていました。
TBUFOVFLW
着信引数 (maxlen) に割り振られたバイト数は 0 より 大きいが、その引数の値を保管するには不十分です。同期モードで実行すると、ユーザーが見た 提供者の状態は、T_DATAXFER に変わり、rcvcall に戻される情報が 廃棄されます。
TLOOK
このトランスポート終点で非同期イベントが起こって、即時のアテンションが必要です。
TNODATA
O_NONBLOCK が設定され、関数が接続確立プロシージャーを 正常に開始しましたが、リモート・ユーザーからの応答を待機しません でした。
TNOTSUPPORT
この関数は、基礎トランスポート提供者によって サポートされません。
TOUTSTATE
正しくないシーケンスで関数が出されました。
TPROTO
このエラーは、XTI と他に適切な XTI (t_errno) が ないトランスポート提供者の間で通信問題が検出されたことを 示しています。
TSYSERR
この関数の実行時に、システム・エラーが発生しました。

関連情報