コネクションモードサービスでは、データ転送のみではなく、接続の確立そのものを非同期で行うようアプリケーションによって設定することが可能です。操作のシーケンスは他のプロセスに接続しようとしている場合と、接続を待機している場合とで異なります。
プロセスは接続を試み、非同期で接続を完了することが可能です。プロセスは最初に接続エンドポイントを作成し、fcntl(2) を使用してエンドポイントを非ブロッキング操作を行うように構成します。コネクションレスデータ転送同様、エンドポイントは接続の確立時とそれ以降のデータ転送に対し非同期通知が行われるよう構成することも可能です。それに続き接続プロセスは t_connect(3NSL) 関数を使用して転送設定の初期化を行います。その後、t_rcvconnect(3NSL) 関数を使用して接続の確立の確認が行われます。
非同期状態で接続の待機を行う場合、プロセスは最初にサービスアドレスにバインドされた非ブロッキングエンドポイントを確立します。poll(2) の結果、または非同期通知によって接続要求の着信が伝えられた場合、プロセスは t_listen(3NSL) 関数を使用して接続要求を取得します。プロセスは接続を受け付けるために t_accept(3NSL) 関数を使用します。応答を行うエンドポイントは非同期データ転送を行うため個別に構成されている必要があります。
#include <tiuser.h> int fd; struct t_call *call; fd = .../*非ブロッキングエンドポイントを確立*/ call = (struct t_call *) t_alloc(fd, T_CALL, T_ADDR); .../*call 構造体の初期化*/ t_connect(fd, call, call); /*接続要求は非同期で進行*/ .../*接続が受け付けられた通知を受信*/ t_rcvconnect(fd, &call);
#include <tiuser.h> int fd, res_fd; struct t_call call; fd = ... /*非ブロッキングエンドポイントを確立*/ .../*接続要求が着信した通知を受信*/ call = (struct t_call *) t_alloc(fd, T_CALL, T_ALL); t_listen(fd, &call); .../*接続を受け付けるか拒否するかの判定*/ res_fd = ... /*応答用に非ブロッキングエンドポイントを確立*/ t_accept(fd, res_fd, call);