標準/拡張機能 | 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() は受け取られたバイト数を戻します。