t_rcv() - 接続により送信されるデータ/優先データの受信

標準

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

形式

#define _XOPEN_SOURCE_EXTENDED 1
#include <xti.h>

int t_rcv(int fd, char *buf, unsigned int nbytes, int *flags);

機能説明

標準データまたは優先データのいずれかを 受信します。引数 fd は、データが到着する ローカル・トランスポート終点を識別します。buf は、ユーザー・データが入れられる受信バッファーを 指します。nbytes は、受信バッファーのサイズを 指定します。引数 flags は t_rcv() からの戻り時に 設定でき、また次のとおりにオプション・フラグを指定します。

デフォルトでは、t_rcv() は同期モードで操作し、現在使用可能なものがない場合には、データの到着を待ちます。ただし、O_NONBLOCK が設定された (t_open() または fcntl() を使用して) 場合には、t_rcv() は、非同期モードで実行し、データが使用できないと失敗します。(以下の TNODATA を参照してください)。

呼び出しからの戻り時に、T_MORE が flags に設定 されると、これはさらにデータがあることを示し、現行の優先トランスポート・サービス・データ単位 (ETSDU) は 複数の t_rcv() 呼び出しで受信する必要があります。非同期モードでは、受け取られたバイト数が指定された 受信バッファーのサイズより小さくとも、T_MORE フラグは t_rcv() 呼び出しからの戻り時に設定されることがあります。T_MORE フラグが 設定された各 t_rcv() は、現行の ETSDU 用のデータをさらに取得 するために別の t_rcv() が後に続く必要があることを示します。ETSDU の終わりは、T_MORE フラグが設定されていない t_rcv() 呼び出し を戻すことによって識別されます。T_MORE フラグは、TCP トランスポート提供者の使用時には標準データにとって 無意味なので、無視してください。nbytes が t_rcv() への呼び出し時にゼロより大きいと、t_rcv() は TSDU の終わりがユーザーに戻されている場合だけ 0 を 戻します。

戻り時に、戻されたデータは、T_EXPEDITED が flags に 設定されると優先データになります。優先データのバイト数が nbytes を超えた場合、t_rcv() は初期呼び出しからの 戻り時に T_EXPEDITED と T_MORE を設定します。残りの ETSDU を検索するための以降の呼び出しは、戻り時に T_EXPEDITED を設定します。ETSDU の終わりは、T_MORE フラグが設定されていない t_rcv() 呼び出し を戻すことによって識別されます。

同期モードでは、ユーザーが標準データまたは優先データの到着について通知してもらう唯一の方法は、この関数を出すか、t_look() 関数を使用して T_DATA イベントまたは T_EXDATA イベントをチェックすることです。さらに、プロセスは、選択 / ポーリング・インターフェースを使用して通知してもらうように、設定できます。

有効状態: T_DATAXFER

戻り値

正常に実行された場合、t_rcv() は受け取られたバイト数を戻します。

正常に実行されなかった場合、t_rcv() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
TBADF
指定されたファイル記述子は、トランスポート終点を 指していません。
TLOOK
このトランスポート終点で非同期イベントが起こって、即時のアテンションが必要です。
TNODATA
O_NONBLOCK が設定されましたが、トランスポート提供者から 使用できるデータは現在ありません。
TNOTSUPPORT
この関数は、基礎トランスポート提供者によって サポートされません。
TOUTSTATE
関数は、fd によって参照されたトランスポート終点で 誤ったシーケンスで発行されました。
TPROTO
このエラーは、XTI と他に適切な XTI (t_errno) が ないトランスポート提供者の間で通信問題が検出されたことを 示しています。
TSYSERR
この関数の実行時に、システム・エラーが発生しました。

関連情報