標準/拡張機能 | 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);
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() のサポートされたオプションに関する説明を 参照してください。ユーザーは、opt の len フィールドをゼロに 設定して、プロトコル・オプションをネゴシエーションしないように 選択できます。この場合には、提供者はデフォルト・オプションを使用できます。
デフォルト・オプションを使用した場合には、sndcall->opt.buf は、対応するオプションを使用してバッファーを指し示す必要があります。rcvcall->addr と rcvcall->opt によって指された netbuf 構造体の maxlen フィールドと buf フィールドは、呼び出し前に設定する必要があります。
接続要求でユーザー・データを渡すことは TCP では サポートされていないので、udata 引数は常に 無意味です。
戻り時には、rcvcall の addr、opt、および udata フィールドは、接続に関連した値を反映するように更新されます。したがって、各引数の maxlen フィールドは、それぞれの バッファーの最大サイズを示すためにこの関数を発行する前に 設定する必要があります。しかし、rcvcall は NULL ポインターになることが あります。この場合は、t_connect() からの戻り時に情報は ユーザーに提供されません。
デフォルトでは、t_connect() は、同期モードで実行し、制御をローカル・ユーザーに戻す前に宛先ユーザーの応答を待ちます。正常に戻ること (すなわち、戻り値がゼロ) は、要求された接続が確立されていることを意味します。しかし、O_NONBLOCK が設定された (t_open() または fcntl() を使用して) 場合には、t_connect() は、非同期モードで実行します。この場合には、呼び出しはリモート・ユーザーの応答を待機しませんが、即時に制御をローカル・ユーザーに戻し、-1 を戻し、t_errno を TNODATA に設定して、接続がまだ 確立されていないことを示します。この方法で、関数は、接続要求を宛先トランスポート・ユーザーに 送信して、接続確立プロシージャーを簡単に開始します。要求された接続の状況を判別するために、t_rcvconnect() 関数は t_connect() と一緒に使用されます。
同期 t_connect() 呼び出しがシグナルによって妨害されると、対応するトランスポート終点の状態が T_OUTCON になり、t_rcvconnect()、t_rcvdis()、または t_snddis() のさらなる呼び出しが 許可されます。
有効状態: T_IDLE
正常に実行された場合、t_connect() は 0 を戻します。