|
|
一般的な通信呼び出しのエラー
一般的な通信呼び出しのエラーは、呼び出しが同期または非同期で行われたかどうかに関係なく、どのような通信呼び出しでも発生する可能性があります。tperrno(5) には、TPESVCFAIL、TPESVCERR、TPEBLOCK、または TPGOTSIG エラーが返されます。
TPESVCFAIL および TPESVCERR エラー
tpcall() または tpgetrply() を呼び出した結果、通信の応答部分が失敗すると、tperrno(5) に TPESVCERR または TPSEVCFAIL が返されます。tpreturn() に渡された引数でエラーが判別され、この関数で実行する処理が決定されます。
引数の処理中に tpreturn() でエラーが発生すると、システムはエラーを元の要求元に返し、tperrno(5) に TPESVCERR を設定します。受信側では、tperrno() の値を調べてエラーの発生を確認します。システムでは、tpreturn() 関数からのデータ送信は行われず、tpgetrply() でエラーが発生した場合は、呼び出し記述子が無効なものと見なされます。
tpreturn() で TPESVCERR エラーが発生していない場合、rval に返された値で呼び出しが成功したか失敗したかを判断できます。アプリケーションで rval パラメータに TPFAIL が指定されると、システムは tperrno(5) に TPESVCFAIL を返し、呼び出し元にデータ・メッセージを送信します。rval に TPSUCCESS が設定されると、呼び出し元に制御が正常に戻り、tperrno() は設定されず、呼び出し元がデータを受信します。
TPEBLOCK および TPGOTSIG エラー
TPEBLOCK および TPGOTSIG エラー・コードは、メッセージの要求側に返される場合も応答側に返される場合もあるので、すべての通信呼び出に対して返される可能性があります。
ブロッキング状態が発生している場合に、要求を同期または非同期に送信するプロセスでブロッキング状態を無視するように flags パラメータに TPPNOBLOCK が設定されていると、システムは TPEBLOCK を返します。たとえば、システムのキューがすべていっぱいになっている場合、要求が送信されるとブロッキング状態になります。
tpcall() がブロッキング状態を示していない場合は、通信の送信部分だけに影響します。要求の送信に成功すると、その呼び出しが応答を待っている間にブロッキング状態が存在したとしても、TPEBLOCK は返されません。
flags に TPNOBLOCK を設定して呼び出しを行った場合、tpgetrply() が応答を待っている間にブロッキング状態が発生すると、tpgetrply() に TPEBLOCK が返されます。この状況は、メッセージがその時点で使用できない場合などに発生します。
TPGOTSIG エラーは、シグナルによってシステム・コールに割り込みが発生したことを示します。このような状況は、実際にはエラーではありません。通信用の関数で flags パラメータに TPSIGRSTRT が設定されていると、呼び出しは失敗せず、tperrno(5) に TPGOTSIG エラー・コードは返されません。
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|