クライアントが1つのサーバーに情報を送信し、サーバーがメッセージを受信して他のすべてのサーバーに転送する分散システムを作成しようとしています。システムは、インターフェイス定義言語としてRPCとXDRを利用します。
サーバーがメッセージを受信する部分を取得しました。しかし、メッセージを他のサーバーに転送できません。メッセージを転送できたとしても、クライアントがその特定のサーバーにメッセージを送信した場合、つまりそのメッセージと一緒に送信された場合にのみ出力されます。
例:サーバーAにHelloというメッセージを送信すると、サーバーAはそれをサーバーBにも転送することになっています。サーバーBはメッセージを取得し、印刷しません。代わりに、サーバーBに メッセージHiを送信すると、 HELLOHIが出力されます。これは、Bがメッセージを受け取り、それを完全に印刷しなかったことを意味します。
なぜそれが起こっているのかについての提案はありますか?rpc_broadcast
クライアントから受信したメッセージを他のサーバーにブロードキャストするために使用しています。
Edit1:これは、すべてのサーバーがブロードキャストを受信したときに呼び出そうとするメソッドです。ロジックを実装する前に、静的なHELLO THEREを印刷して、動作するかどうかを確認しようとしています。
int *
pass_details_1_svc (xaction_args *argp, struct svc_req *rqstp)
{
int *i;
printf("HELLO THERE");
return i;
}
クライアントからメッセージを受信したときに行うrpc_broadcast呼び出しは次のとおりです。
xaction_args ag; ag.passMsg="こんにちは";
rpc_broadcast(others、TICKER_PROG、TICKER_VERS、PASS_DETAILS、(xdrproc_t)xdr_xaction_args、&ag);
passMsg
XDRファイルで定義された構造体の変数です。