!--a11y-->
RFC_RC SAP_API RfcListen(RFC_HANDLE handle);
を使用して、利用できる
RFC 依頼があるかどうかをチェックすることができます。RFC
コールへの応答を待機したくない場合には、以下の機能( RfcReceive以外)を利用して送られてくる RFC イベントポーリングできます。この機能では常に制御が即座に返されます。
RfcListen が RFC_OK を返す場合、イベントを処理するために RfcReceive を呼び出す必要があります。一回にチェックできる受信 RFC メッセージは 1 つに限られます。 RfcDispatchによって新規 RFC 依頼を待機する間に、登録モード( RfcAccept参照)を使用または使用しないで、 RfcListen を使用することができます。 RfcListen は直ちに戻りますので、新規 RFC を待機するために RfcWaitForRequestを使用するよう推奨します。この機能は
SAPRFC.H 内に定義されます。戻り値
:
機能パラメータ
:

リモートファンクションコールの応答を待機している間に
RFC_RC rc;
rc = RfcCall(handle, ...);
do
{
rc = RfcListen(handle);
if(rc == RFC_RETRY)
{
// while waiting for the RFC answer, do something ...
...
}
} while (rc == RFC_RETRY);
if(rc == RFC_OK)
rc = RfcReceive(handle, ...);
...

RfcListen
および RfcDispatch を使用します。RFC_RC rc;
RFC_HANDLE handle = RfcAccept(argv);
...
do
{
// Waiting for the next RFC request
for(rc = RFC_RETRY; rc == RFC_RETRY;)
{
rc = RfcListen(handle);
if(rc == RFC_RETRY)
{
// while waiting for the next RFC request, do something ...
...
}
rc = RfcDispatch(handle);
} while(rc == RFC_OK);
RfcClose(handle);
exit(0);

RFC
ライブラリへの多くのコールは「ブロック」します。つまり、通信が完了するまで制御を返しません。 RfcListen 機能を使用すればこの障害を克服することができます。 RfcListen は、依頼があるかどうかをチェックします。依頼がない場合、プログラムを起動し、実行することができます。しかし、コールが処理中のとき、 RfcListen は結果をバッファに入れて発送するので、ブロックは発生しません。したがって結果が失われることはありません。
