4.6.4 dc_clt_assem_send_s − 組み立てメッセージの送信
- 〈この項の構成〉
(1) 形式
(a) _s付き関数
#include <dcvclt.h> DCLONG dc_clt_assem_send_s(DCCLT_ID cltid, char CLTFAR *buff, DCLONG sendleng, char CLTFAR *hostname, unsigned short portnum, DCLONG timeout, DCLONG flags)
(b) _s無し関数
#include <dcvclt.h> DCLONG dc_clt_assem_send(char CLTFAR *buff, DCLONG sendleng, char CLTFAR *hostname, unsigned short portnum, DCLONG timeout, DCLONG flags)
(2) 機能
メッセージの組み立て機能を使用して,メッセージを送信します。この場合,4バイトのメッセージ情報を送信したあと,引数buffに指定されたメッセージを送信します。相手システムとのコネクションが確立されていない場合は,引数hostnameとportnumの指定値を基にコネクションを確立し,メッセージを送信します。
また,クライアント環境定義DCCLTDELIVERYCHECKにYを指定した場合は,メッセージの送達確認機能を使用して,メッセージを送信します。この場合,11バイトのメッセージ情報を送信したあと,引数buffに指定されたメッセージを送信します。TP1/Clientは,11バイトのメッセージ情報を受信したあと,CUPに制御を戻します。
この関数を実行する場合,引数flagsにDCCLT_ONEWAY_SNDまたはDCCLT_SNDRCVを指定した,dc_rpc_open_s関数をあらかじめ実行してください。
(3) UAPで値を設定する引数
-
cltid
dc_clt_cltin_s関数で受け取ったクライアントIDを指定します。
-
buff
送信するメッセージを格納する領域を指定します。sendlengで指定する長さ以上の領域を指定してください。.
-
sendleng
送信するメッセージの長さを指定します。
-
hostname
コネクションが確立されていない場合,接続するノードのホスト名を指定します。
NULLを指定すると,dc_rpc_open_s関数を実行したときに取得したクライアント環境定義DCSNDHOSTの内容を参照します。
ホスト名として指定できる長さは,63文字※までです。
ホスト名として,10進ドット記法のIPアドレスを指定することもできます。
- 注※
-
クライアント環境定義DCCLTOPTIONに00000008を指定した場合,ホスト名として指定できる長さは255文字までとなります。
-
portnum
コネクションが確立されていない場合,コネクションを確立して接続するノードのポート番号を指定します。
0を指定すると,dc_rpc_open_s関数を実行したときに取得したクライアント環境定義DCSNDPORTの内容を参照します。
-
timeout
メッセージの送達確認機能を使用するときに有効な引数です。応答専用データ受信時の最大待ち時間(秒)を指定します。-1から65535の整数を指定してください。
- -1を指定した場合
-
応答専用データを受信するまで無制限に待ちます。
- 0を指定した場合
-
応答専用データの受信を待ちません。受信するメッセージがなかった場合は,DCCLTER_TIMED_OUTでエラーリターンします。
- 1から65535を指定した場合
-
指定した秒数だけメッセージの受信を待ちます。指定した秒数を過ぎてもメッセージを受信できない場合は,DCCLTER_TIMED_OUTでエラーリターンします。
応答専用データが分割されて届いた場合は,11バイトの応答専用データが届くまで受信処理を繰り返します。受信処理が発生すると,この引数に指定した最大待ち時間が毎回適用されます。この引数に指定した値を,クライアントの最大応答待ち時間として適用したい場合は,クライアント環境定義DCCLTOPTIONに,00000002オプションを指定してください。
-
flags
メッセージを送信したあと,コネクションを解放するかどうかを指定します。
- DCNOFLAGS
-
メッセージを送信したあと,dc_rpc_close_s関数を実行するまでコネクションを解放しません。ただし,障害時を除きます。
- DCCLT_SND_CLOSE
-
メッセージを送信したあと,コネクションを解放します。メッセージの送達確認機能を使用する場合は,メッセージ情報を受信したあと,コネクションを解放します。
(4) リターン値
リターン値 |
数値 (10進数) |
意味 |
---|---|---|
DC_OK |
0 |
正常終了しました。 |
DCCLTER_INVALID_ARGS |
-2501 |
引数に指定した値が誤っています。 |
DCCLTER_PROTO |
-2502 |
次のどちらかの要因が考えられます。
|
DCCLTER_NO_BUFS |
-2504 |
メモリ不足が発生しました。 |
DCCLTER_NET_DOWN |
-2506 |
ネットワーク障害が発生しました。コネクションは解放されます。 |
DCCLTER_TIMED_OUT |
-2507 |
コネクション確立要求時にタイムアウトになりました。または,メッセージの送達確認機能の使用時に,応答専用データの受信でタイムアウトになりました。コネクションは解放されます。 |
DCCLTER_SYSERR |
-2518 |
システムエラーが発生しました。ネットワーク障害の場合,コネクションは解放されます。 |
DCCLTER_RESOURCE |
-2538 |
資源不足が発生しました。 |
DCCLTER_WRONG_HOST |
-2539 |
ホスト名が誤っています。または,hostnameおよびDCSNDHOSTの両方にホスト名が指定されていません。 |
DCCLTER_CONNREFUSED |
-2541 |
相手システムに対するコネクションの確立要求が拒絶されました。 |
DCCLTER_CONNFREE |
-2542 |
メッセージの送達確認機能の使用時に,相手システムからコネクションが解放されました。 |
DCCLTER_INVALID_CLTID |
-2544 |
引数cltidに指定したクライアントIDが,dc_clt_cltin_s関数で受け取ったクライアントIDと異なっています。 |
DCCLTER_PORT_IN_USE |
-2547 |
OSが自動的に割り当てるポート番号が不足しています。 |
DCCLTER_INVALID_MESSAGE |
-2548 |
メッセージの送達確認機能の使用時に,不正なメッセージを受信しました。コネクションは解放されます。 |
DCCLTER_COLLISION_MESSAGE |
-2584 |
メッセージの送達確認機能の使用時に,メッセージが衝突しました。コネクションは解放されます。 |
(5) 注意事項
-
メッセージ送信時に相手システムからコネクションが解放された場合,送信するメッセージ長によっては,コネクションの解放を検知できないことがあります。次に,使用する機能別に注意事項を示します。
- メッセージの組み立て機能を使用する場合
-
メッセージ送信時にこの関数でコネクションの解放を検知できないときは,この関数の次以降に発行する関数で検知することがあります。CUPを作成するときは,このことを考慮してください。
- メッセージの送達確認機能を使用する場合
-
メッセージ送信時にコネクションの解放を検知できないときは,応答専用データ受信時に検知します。
-
メッセージの組み立て機能および送達確認機能を使用する場合は,短いパケットで送受信するため,送信処理に時間が掛かることがあります。送信処理に時間が掛かる場合は,クライアント環境定義DCCLTTCPNODELAYにYを指定してください。
-
リターン値DCCLTER_SYSERRが戻る場合,CUPを終了してから開始し直してください。