標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
XPG4.2 | 両方 |
#define _XOPEN_SOURCE_EXTENDED 1
#include <xti.h>
int t_snd(int fd, char *buf, unsigned int nbytes, int flags);
デフォルトでは、t_snd() は、同期モードで動作し、呼び出しが行われた時点で、フロー制御制約事項によって、ローカル・トランスポート提供者がデータを受け入れることができない場合には、待機することがあります。しかし、O_NONBLOCK が設定された (t_open() または fcntl() を使用して) 場合には、t_snd() は、非同期モードで実行し、フロー制御制約事項があると即時に失敗します。プロセスは、t_look() または選択 / ポーリングのいずれかを使用して、フロー制御制約事項がクリアされる時点を通知してもらうように、設定できます。
正常に実行された場合、t_snd() はトランスポート提供者が受け入れたバイト数を戻します。通常、これは nbytes に指定されているバイト数と等しくなります。しかし、O_NONBLOCK が設定されると、トランスポート提供者は、実際にデータの一部しか受け入れないという可能性があります。この場合には、t_snd() は、nbytes の値より小さい値を戻します。
各 TSDU または ETSDU のサイズは、t_getinfo() によって 戻された info 引数の TSDU または ETSDU フィールドの 現行値によって指定されたトランスポート提供者の限界を超えないでください。イベント (例えば、切断) が起こったことをプロセスに通知する ために、エラー TLOOK を戻せます。
有効状態: T_DATAXFER
正常に実行された場合、t_snd() はトランスポート提供者が受け入れたバイト数を戻します。
非同期モードでは、トランスポート提供者が受け入れたバイト数が 要求されたバイト数より小さい場合には、これはトランスポート提供者がフロー制御のためにブロックされて いることを指示できることに注意してください。
トランスポート提供者が、トランスポート終点のすべてのユーザーを、単一ユーザーとして扱うことを忘れないことが重要です。したがって、複数のプロセスが並行 t_snd() 呼び出しを出した場合には、異なるデータが混合することがあります。TSDU または ETSDU の最大サイズを超える複数の送信が XTI で見つからないことがあります。この場合には、インプリメンテーション依存エラーが、おそらく以降の XTI 呼び出しで発生し (トランスポート提供者によって生成され) ます。このエラーは、接続打ち切りの形式、すなわち、TSYSERR、TBADDATA、または TPROTO エラーをとることがあります。TSDU または ETSDU の最大サイズを超える複数の送信が XTI で見つかった場合には、t_snd() は、TBADDATA を使用すると失敗することがあります。