void wait_death() { int ferr; int lerr; MS_Mon_Msg *msg; char recv_buffer[BUFSIZ]; BMS_SRE sre; do { lerr = XWAIT(LREQ, -1); TEST_CHK_WAITIGNORE(lerr); lerr = BMSG_LISTEN_((short *) &sre, // sre 0, // listenopts 0); // listenertag } while (lerr == BSRETYPE_NOWORK); assert(sre.sre_flags & XSRE_MON); ferr = BMSG_READDATA_(sre.sre_msgId, // msgid recv_buffer, // reqdata BUFSIZ); // bytecount util_check("XMSG_READDATA_", ferr); msg = (MS_Mon_Msg *) recv_buffer; assert(msg->type == MS_MsgType_ProcessDeath); printf("received death message for %s\n", msg->u.death.process_name); XMSG_REPLY_(sre.sre_msgId, // msgid NULL, // replyctrl 0, // replyctrlsize NULL, // replydata 0, // replydatasize 0, // errorclass NULL); // newphandle }
void *server_thr(void *arg) { int ferr; int lerr; int recv_len; BMS_SRE sre; MyThread *thr; int thrinx; thr = (MyThread *) arg; thrinx = thr->inx; // process requests for (;;) { do { lerr = XWAIT(LREQ, 100); lerr = BMSG_LISTEN_((short *) &sre, // sre 0, // listenopts 0); // listenertag if ((lerr == XSRETYPE_NOWORK) && (atomic_read(&msg_count) >= maxmsg)) return NULL; } while (lerr == XSRETYPE_NOWORK); if (lerr == XSRETYPE_ABANDON) continue; if (sre.sre_flags & XSRE_MON) { ferr = XMSG_READDATA_(sre.sre_msgId, // msgid recv_buffer[thrinx], // reqdata BUFSIZ); // bytecount util_check("XMSG_READDATA_", ferr); MS_Mon_Msg *msg = (MS_Mon_Msg *) recv_buffer[thrinx]; if (verbose) printf("server(%s): mon-msg type=%d\n", my_name, msg->type); if (msg->type == MS_MsgType_Close) { closes++; if (verbose) printf("server(%s): closes=%d\n", my_name, closes); } } else { atomic_inc(&msg_count); if (verbose) printf("server(%s): msg-count=%d\n", my_name, atomic_read(&msg_count)); } recv_len = rnd(BUFSIZ); BMSG_REPLY_(sre.sre_msgId, // msgid NULL, // replyctrl 0, // replyctrlsize recv_buffer[thrinx], // replydata recv_len, // replydatasize 0, // errorclass NULL); // newphandle if (closes) break; } return NULL; }
int main(int argc, char *argv[]) { int exit = false; int err; int ferr; int len; char recv_buffer[BUFSIZ]; BMS_SRE sre; ferr = msg_init(&argc, &argv); TEST_CHK_FEOK(ferr); ferr = msg_mon_process_startup(true); // system messages? TEST_CHK_FEOK(ferr); msg_mon_enable_mon_messages(true); for (;;) { do { err = XWAIT(LREQ, -1); TEST_CHK_WAITIGNORE(err); err = BMSG_LISTEN_((short *) &sre, // sre 0, // listenopts 0); // listenertag } while (err == BSRETYPE_NOWORK); ferr = BMSG_READDATA_(sre.sre_msgId, // msgid recv_buffer, // reqdata BUFSIZ); // bytecount TEST_CHK_FEOK(ferr); if ((sre.sre_flags & BSRE_MON)) { MS_Mon_Msg *msg = (MS_Mon_Msg *) recv_buffer; if (msg->type == MS_MsgType_Close) exit = true; } strcat(recv_buffer, "- reply from server"); len = (int) strlen(recv_buffer) + 1; BMSG_REPLY_(sre.sre_msgId, // msgid NULL, // replyctrl 0, // replyctrlsize recv_buffer, // replydata len, // replydatasize 0, // errorclass NULL); // newphandle if (exit) break; } ferr = msg_mon_process_shutdown(); TEST_CHK_FEOK(ferr); return 0; }
// // server main // int main(int pv_argc, char *pa_argv[]) { bool lv_done; int lv_ferr; int lv_lerr; BMS_SRE lv_sre; CALL_COMP_DOVERS(idtmsrv, pv_argc, pa_argv); do_init(pv_argc, pa_argv); lv_ferr = msg_mon_process_startup(true); // system messages assert(lv_ferr == XZFIL_ERR_OK); msg_mon_enable_mon_messages(true); lv_ferr = msg_mon_get_my_process_name(ga_name, sizeof(ga_name)); assert(lv_ferr == XZFIL_ERR_OK); do_shm(); lv_ferr = timer_start_cb(gv_time_refresh_delay, 0, 0, &gv_tleid, &timer_callback); assert(lv_ferr == XZFIL_ERR_OK); lv_done = false; while (!lv_done) { do { lv_lerr = XWAIT(LREQ, -1); lv_lerr = BMSG_LISTEN_((short *) &lv_sre, // sre 0, // listenopts 0); // listenertag } while (lv_lerr == XSRETYPE_NOWORK); if (lv_sre.sre_flags & XSRE_MON) { do_mon_msg(&lv_sre, &lv_done); } else { do_req(&lv_sre); } } if (gv_verbose) printf("server %s shutting down\n", ga_name); lv_ferr = msg_mon_process_shutdown(); assert(lv_ferr == XZFIL_ERR_OK); return 0; }
// // server main // int main(int argc, char *argv[]) { bool done; int ferr; int lerr; BMS_SRE sre; do_init(argc, argv); ferr = msg_mon_process_startup(true); // system messages assert(ferr == XZFIL_ERR_OK); msg_mon_enable_mon_messages(true); ferr = msg_mon_get_my_process_name(name, sizeof(name)); assert(ferr == XZFIL_ERR_OK); do_shm(); done = false; while (!done) { do { lerr = XWAIT(LREQ, -1); lerr = BMSG_LISTEN_((short *) &sre, // sre 0, // listenopts 0); // listenertag } while (lerr == XSRETYPE_NOWORK); if (sre.sre_flags & XSRE_MON) { do_mon_msg(&sre, &done); } else { do_req(&sre); } } if (verbose) printf("server %s shutting down\n", name); ferr = msg_mon_process_shutdown(); assert(ferr == XZFIL_ERR_OK); return 0; }
int main(int argc, char *argv[]) { bool client = false; int count; int ferr; int inx; int lerr; int loop = 10; int msgid; int oid; TPT_DECL (phandle); RT results; MS_SRE sre; BMS_SRE sre_tb; MS_SRE sre_tx; TAD zargs[] = { { "-client", TA_Bool, TA_NOMAX, &client }, { "-loop", TA_Int, TA_NOMAX, &loop }, { "-server", TA_Ign, TA_NOMAX, NULL }, { "", TA_End, TA_NOMAX, NULL } }; msfs_util_init(&argc, &argv, msg_debug_hook); arg_proc_args(zargs, false, argc, argv); util_test_start(client); ferr = msg_mon_process_startup(!client); // system messages? TEST_CHK_FEOK(ferr); if (client) { ferr = msg_mon_open_process((char *) "$srv", // name TPT_REF(phandle), &oid); TEST_CHK_FEOK(ferr); } else msg_mon_enable_mon_messages(true); // need this util_gethostname(my_name, sizeof(my_name)); for (inx = 0; inx < loop; inx++) { count = inx % 100; if (client) { ferr = XMSG_LINK_(TPT_REF(phandle), // phandle &msgid, // msgid send_bufferc, // reqctrl (short) count, // reqctrlsize recv_bufferc, // replyctrl (short) (count+1), // replyctrlmax send_buffer, // reqdata (short) (count+2), // reqdatasize recv_buffer, // replydata (short) (count+3), // replydatamax 0, // linkertag (short) count, // pri 0, // xmitclass 0); // linkopts util_check("XMSG_LINK_", ferr); ferr = XMSG_BREAK_(msgid, results.u.s, TPT_REF(phandle)); util_check("XMSG_BREAK_", ferr); } else { do { lerr = XWAIT(LREQ, -1); TEST_CHK_WAITIGNORE(lerr); lerr = XMSG_LISTEN_((short *) &sre_tx, // sre XLISTEN_TEST_IREQM, // listenopts 0); // listenertag if (lerr == XSRETYPE_NOWORK) continue; if (sre_tx.sre_flags & XSRE_MON) { // toss out monitor messages lerr = XMSG_LISTEN_((short *) &sre, // sre 0, // listenopts 0); // listenertag assert(lerr == XSRETYPE_IREQ); assert(sre_tx.sre_flags & XSRE_MON); lerr = XSRETYPE_NOWORK; XMSG_REPLY_(sre.sre_msgId, // msgid NULL, // replyctrl 0, // replyctrlsize NULL, // replydata 0, // replydatasize 0, // errorclass NULL); // newphandle continue; } lerr = BMSG_LISTEN_((short *) &sre_tb, // sre BLISTEN_TEST_IREQM, // listenopts 0); // listenertag assert(lerr == BSRETYPE_IREQ); lerr = XMSG_LISTEN_((short *) &sre, // sre 0, // listenopts 0); // listenertag assert(lerr == XSRETYPE_IREQ); } while (lerr == XSRETYPE_NOWORK); assert(sre.sre_pri == count); assert(sre.sre_reqCtrlSize == count); assert(sre.sre_reqDataSize == (count + 2)); assert(sre.sre_replyCtrlMax == (count + 1)); assert(sre.sre_replyDataMax == (count + 3)); assert(sre.sre_msgId == sre_tx.sre_msgId); assert(sre.sre_flags == sre_tx.sre_flags); assert(sre.sre_pri == sre_tx.sre_pri); assert(sre.sre_reqCtrlSize == sre_tx.sre_reqCtrlSize); assert(sre.sre_reqDataSize == sre_tx.sre_reqDataSize); assert(sre.sre_replyCtrlMax == sre_tx.sre_replyCtrlMax); assert(sre.sre_replyDataMax == sre_tx.sre_replyDataMax); assert(sre.sre_msgId == sre_tb.sre_msgId); assert(sre.sre_flags == sre_tb.sre_flags); assert(sre.sre_pri == sre_tb.sre_pri); assert(sre.sre_reqCtrlSize == sre_tb.sre_reqCtrlSize); assert(sre.sre_reqDataSize == sre_tb.sre_reqDataSize); assert(sre.sre_replyCtrlMax == sre_tb.sre_replyCtrlMax); assert(sre.sre_replyDataMax == sre_tb.sre_replyDataMax); XMSG_REPLY_(sre.sre_msgId, // msgid NULL, // replyctrl 0, // replyctrlsize recv_buffer, // replydata 0, // replydatasize 0, // errorclass NULL); // newphandle } } if (client) { ferr = msg_mon_close_process(TPT_REF(phandle)); TEST_CHK_FEOK(ferr); } else { ferr = msg_mon_process_close(); TEST_CHK_FEOK(ferr); } ferr = msg_mon_process_shutdown(); TEST_CHK_FEOK(ferr); util_test_finish(client); return 0; }
int main(int argc, char *argv[]) { int exit = false; int err; int ferr; int len; char my_name[100]; char recv_buffer[BUFSIZ]; BMS_SRE sre; bool verbose = false; TAD zargs[] = { { "-v", TA_Bool, TA_NOMAX, &verbose }, { "", TA_End, TA_NOMAX, NULL } }; ferr = msg_init(&argc, &argv); arg_proc_args(zargs, false, argc, argv); TEST_CHK_FEOK(ferr); ferr = msg_mon_process_startup(true); // system messages? TEST_CHK_FEOK(ferr); ferr = msg_mon_get_my_process_name(my_name, (int) sizeof(my_name)); TEST_CHK_FEOK(ferr); msg_mon_enable_mon_messages(true); for (;;) { do { err = XWAIT(LREQ, -1); TEST_CHK_WAITIGNORE(err); err = BMSG_LISTEN_((short *) &sre, // sre 0, // listenopts 0); // listenertag } while (err == BSRETYPE_NOWORK); ferr = BMSG_READDATA_(sre.sre_msgId, // msgid recv_buffer, // reqdata BUFSIZ); // bytecount TEST_CHK_FEOK(ferr); if ((sre.sre_flags & BSRE_MON)) { MS_Mon_Msg *msg = (MS_Mon_Msg *) recv_buffer; if (verbose) printf("server %s rcvd mon-msg %s (%d)\n", my_name, SB_get_label_ms_mon_msgtype(msg->type), msg->type); if (msg->type == MS_MsgType_Close) exit = true; } strcat(recv_buffer, "- reply from server"); len = (int) strlen(recv_buffer) + 1; BMSG_REPLY_(sre.sre_msgId, // msgid NULL, // replyctrl 0, // replyctrlsize recv_buffer, // replydata len, // replydatasize 0, // errorclass NULL); // newphandle if (exit) break; } ferr = msg_mon_process_shutdown(); TEST_CHK_FEOK(ferr); return 0; }
int main(int argc, char *argv[]) { bool check = false; int csize = -1; bool client = false; int dsize = MAX_BUF; int ferr; int inx; int len; int lerr; int loop = 10; int min_csize; int min_dsize; int max_csize = -1; int max_dsize = -1; int msgid; int oid; TPT_DECL (phandle); uint result; RT results; BMS_SRE sre; bool verbose = false; TAD zargs[] = { { "-check", TA_Bool, TA_NOMAX, &check }, { "-client", TA_Bool, TA_NOMAX, &client }, { "-csize", TA_Int, MAX_BUF, &csize }, { "-dsize", TA_Int, MAX_BUF, &dsize }, { "-loop", TA_Int, TA_NOMAX, &loop }, { "-maxcsize", TA_Int, MAX_BUF, &max_csize }, { "-maxdsize", TA_Int, MAX_BUF, &max_dsize }, { "-server", TA_Ign, TA_NOMAX, NULL }, { "-v", TA_Bool, TA_NOMAX, &verbose }, { "", TA_End, TA_NOMAX, NULL } }; msfs_util_init(&argc, &argv, msg_debug_hook); arg_proc_args(zargs, false, argc, argv); util_test_start(client); ferr = msg_mon_process_startup(!client); // system messages? TEST_CHK_FEOK(ferr); if (client) { ferr = msg_mon_open_process((char *) "$srv", // name TPT_REF(phandle), &oid); TEST_CHK_FEOK(ferr); } util_gethostname(my_name, sizeof(my_name)); msg_mon_enable_mon_messages(true); if (check) { if (csize < 0) csize = 0; if (dsize == MAX_BUF) dsize = 0; min_csize = csize; min_dsize = dsize; min_csize = min_csize; // touch min_dsize = min_dsize; // touch if (client) { for (inx = 0; inx < MAX_BUF; inx++) { send_buffer[inx] = (char) inx; // cast send_buffer2[inx] = (short) inx; // cast } } } else min_csize = 0; for (inx = 0; inx < loop; inx++) { if (verbose) printf("client=%d, csize=%d, dsize=%d\n", client, csize, dsize); else if (check && (csize == min_csize)) printf("client=%d, csize=%d, dsize=%d\n", client, csize, dsize); if (client) { if (check) { send_buffer[0] = (char) dsize; // cast send_buffer2[0] = (short) csize; // cast len = 0; } else { sprintf(send_buffer, "hello, greetings from %s, inx=%d", my_name, inx); len = (int) strlen(send_buffer) + 1; // cast } ferr = BMSG_LINK_(TPT_REF(phandle), // phandle &msgid, // msgid send_buffer2, // reqctrl csize < 0 ? // reqctrlsize (inx & 1) : csize, recv_buffer3, // replyctrl csize < 0 ? 1 : csize, // replyctrlmax send_buffer, // reqdata check ? dsize : len, // reqdatasize recv_buffer, // replydata MAX_BUF, // replydatamax 0, // linkertag 0, // pri 0, // xmitclass 0); // linkopts util_check("BMSG_LINK_", ferr); ferr = BMSG_BREAK_(msgid, results.u.s, TPT_REF(phandle)); util_check("BMSG_BREAK_", ferr); if (check) assert(results.u.t.ctrl_size == (uint) csize); else assert(results.u.t.ctrl_size == (uint) (csize < 0 ? (inx & 1) : csize)); if (check) assert(results.u.t.data_size == (uint) dsize); else assert(results.u.t.data_size > (strlen(send_buffer) + 14)); if (check) { if (dsize) result = RT_DATA_RCVD; // data else result = 0x0; // no-data assert(results.u.t.errm == result); check_buf(send_buffer2, recv_buffer3, csize); check_buf(send_buffer, recv_buffer, dsize); } else { assert(results.u.t.errm == RT_DATA_RCVD); // data printf("%s\n", recv_buffer); } } else { do { lerr = XWAIT(LREQ, -1); TEST_CHK_WAITIGNORE(lerr); lerr = BMSG_LISTEN_((short *) &sre, // sre 0, // listenopts 0); // listenertag } while (lerr == XSRETYPE_NOWORK); ferr = BMSG_READCTRL_(sre.sre_msgId, // msgid recv_buffer2, // reqctrl sre.sre_reqCtrlSize); // bytecount util_check("BMSG_READCTRL_", ferr); ferr = BMSG_READDATA_(sre.sre_msgId, // msgid recv_buffer, // reqdata sre.sre_reqDataSize); // bytecount util_check("BMSG_READDATA_", ferr); if (sre.sre_flags & XSRE_MON) { printf("server received mon message\n"); inx--; len = 0; } else { if (!check) { strcat(recv_buffer, "- reply from "); strcat(recv_buffer, my_name); len = (int) strlen(recv_buffer) + 1; // cast } else len = 0; } BMSG_REPLY_(sre.sre_msgId, // msgid recv_buffer2, // replyctrl sre.sre_reqCtrlSize, // replyctrlsize recv_buffer, // replydata check ? sre.sre_reqDataSize : len, // replydatasize 0, // errorclass NULL); // newphandle if (sre.sre_flags & XSRE_MON) continue; } if (check) { if (max_csize >= 0) { csize++; if (csize >= max_csize) csize = min_csize; } if ((max_dsize >= 0) && (csize == min_csize)) dsize++; if (dsize >= max_dsize) { printf("break client=%d, csize=%d, dsize=%d\n", client, csize, dsize); break; } if ((max_csize >= 0) || (max_dsize >= 0)) { inx--; continue; } } } if (client) { ferr = msg_mon_close_process(TPT_REF(phandle)); TEST_CHK_FEOK(ferr); } else { ferr = msg_mon_process_close(); TEST_CHK_FEOK(ferr); } ferr = msg_mon_process_shutdown(); TEST_CHK_FEOK(ferr); util_test_finish(client); return 0; }
int main(int argc, char *argv[]) { bool client = false; int exprinx; int ferr; int inx; int len; int lerr; int loop = 100; int msgid[MAX_MSGS]; int oid; char *p; TPT_DECL (phandle); int pri; RT results; int rinx; BMS_SRE sre; BMS_SRE_LDONE sre_ldone; TAD zargs[] = { { "-client", TA_Bool, TA_NOMAX, &client }, { "-loop", TA_Int, TA_NOMAX, &loop }, { "-server", TA_Ign, TA_NOMAX, NULL }, { "", TA_End, TA_NOMAX, NULL } }; msfs_util_init(&argc, &argv, msg_debug_hook); arg_proc_args(zargs, false, argc, argv); util_test_start(client); ferr = msg_mon_process_startup(!client); // system messages? TEST_CHK_FEOK(ferr); if (client) { ferr = msg_mon_open_process((char *) "$srv", // name TPT_REF(phandle), &oid); TEST_CHK_FEOK(ferr); } else msg_enable_priority_queue(); util_gethostname(my_name, sizeof(my_name)); if (client) { for (inx = 0; inx < loop; inx++) { sprintf(send_buffer[inx], "hello, greetings from %s, inx=%d", my_name, inx); pri = 2 * inx + 5; ferr = BMSG_LINK_(TPT_REF(phandle), // phandle &msgid[inx], // msgid NULL, // reqctrl 0, // reqctrlsize NULL, // replyctrl 0, // replyctrlmax send_buffer[inx], // reqdata 100, // reqdatasize recv_buffer[inx], // replydata 100, // replydatamax inx, // linkertag (short) pri, // pri 0, // xmitclass BMSG_LINK_LDONEQ); // linkopts util_check("BMSG_LINK_", ferr); } exprinx = loop - 1; for (inx = 0; inx < loop;) { lerr = XWAIT(LDONE, -1); TEST_CHK_WAITIGNORE(lerr); do { lerr = BMSG_LISTEN_((short *) &sre_ldone, // sre 0, // listenopts 0); // listenertag if (lerr == BSRETYPE_LDONE) { ferr = BMSG_BREAK_(sre_ldone.sre_msgId, results.u.s, TPT_REF(phandle)); util_check("BMSG_BREAK_", ferr); assert(results.u.t.ctrl_size == 0); assert(results.u.t.errm == RT_DATA_RCVD); // data printf("%s\n", recv_buffer[sre_ldone.sre_linkTag]); p = strchr(recv_buffer[sre_ldone.sre_linkTag], '='); assert(p != NULL); rinx = atoi(&p[1]); if (rinx != exprinx) { printf("rinx=%d, exprinx=%d\n", rinx, exprinx); assert(rinx == exprinx); } inx++; exprinx--; } } while (lerr == BSRETYPE_LDONE); } } else { for (inx = 0; inx < loop; inx++) { do { lerr = XWAIT(LREQ, -1); if (inx == 0) sleep(5); lerr = BMSG_LISTEN_((short *) &sre, // sre 0, // listenopts 0); // listenertag } while (lerr == BSRETYPE_NOWORK); ferr = BMSG_READCTRL_(sre.sre_msgId, // msgid NULL, // reqctrl 0); // bytecount util_check("BMSG_READCTRL_", ferr); ferr = BMSG_READDATA_(sre.sre_msgId, // msgid recv_buffer[inx], // reqdata 100); // bytecount util_check("BMSG_READDATA_", ferr); strcat(recv_buffer[inx], "- reply from "); strcat(recv_buffer[inx], my_name); len = (int) strlen(recv_buffer[inx]) + 1; len = len; // touch - not currently used BMSG_REPLY_(sre.sre_msgId, // msgid NULL, // replyctrl 0, // replyctrlsize recv_buffer[inx], // replydata 100, // replydatasize 0, // errorclass NULL); // newphandle } } if (client) { ferr = msg_mon_close_process(TPT_REF(phandle)); TEST_CHK_FEOK(ferr); } ferr = msg_mon_process_shutdown(); TEST_CHK_FEOK(ferr); util_test_finish(client); return 0; }
int main(int argc, char *argv[]) { int abandon = 0; bool client = false; int closes; int count; int count_abandon; int ferr; int inxl; int inxo; int inxs; int lerr; int loop = 10; int maxcp = 1; int maxout = 1; int maxsp = 1; int msgid[MAX_OUT]; int msg_count; bool mq = false; int oid; TPT_DECL2 (phandle, MAX_SRV); int recv_len; RT results; int send_len; char serv[20]; BMS_SRE sre; bool verbose = false; TAD zargs[] = { { "-abandon", TA_Int, TA_NOMAX, &abandon }, { "-client", TA_Bool, TA_NOMAX, &client }, { "-loop", TA_Int, TA_NOMAX, &loop }, { "-maxcp", TA_Int, MAX_CLI, &maxcp }, { "-maxout", TA_Int, MAX_OUT, &maxout }, { "-maxsp", TA_Int, MAX_SRV, &maxsp }, { "-mq", TA_Bool, TA_NOMAX, &mq }, { "-server", TA_Ign, TA_NOMAX, NULL }, { "-v", TA_Bool, TA_NOMAX, &verbose }, { "", TA_End, TA_NOMAX, NULL } }; ferr = msg_init(&argc, &argv); TEST_CHK_FEOK(ferr); msfs_util_init_fs(&argc, &argv, msg_debug_hook); arg_proc_args(zargs, false, argc, argv); util_test_start(client); ferr = msg_mon_process_startup(!client); // system messages? TEST_CHK_FEOK(ferr); ferr = msg_mon_get_my_process_name(my_name, BUFSIZ); util_check("msg_mon_get_my_process_name", ferr); if (client) { ferr = XCONTROLMESSAGESYSTEM(XCTLMSGSYS_SETSENDLIMIT, XMAX_SETTABLE_SENDLIMIT); assert(ferr == XZFIL_ERR_OK); msg_count = 0; count_abandon = 0; for (inxl = 0; inxl < loop; inxl++) { for (inxs = 0; inxs < maxsp; inxs++) { sprintf(serv, "$srv%d", inxs); ferr = msg_mon_open_process((char *) serv, // name TPT_REF2(phandle, inxs), &oid); TEST_CHK_FEOK(ferr); } count = 0; if (abandon) count_abandon = rnd(abandon); for (inxs = 0; inxs < maxsp; inxs++) { for (inxo = 0; inxo < maxout; inxo++) { send_len = rnd(BUFSIZ); ferr = BMSG_LINK_(TPT_REF2(phandle, inxs), // phandle &msgid[inxo], // msgid NULL, // reqctrl 0, // reqctrlsize NULL, // replyctrl 0, // replyctrlmax send_buffer[inxo], // reqdata send_len, // reqdatasize recv_buffer[inxo], // replydata BUFSIZ, // replydatamax 0, // linkertag 0, // pri 0, // xmitclass 0); // linkopts util_check("XMSG_LINK_", ferr); } } for (inxs = 0; inxs < maxsp; inxs++) { for (inxo = 0; inxo < maxout; inxo++) { msg_count++; if (verbose) printf("client(%s): msg-count=%d\n", my_name, msg_count); count++; if (abandon && (count >= count_abandon)) { if (verbose) printf("client(%s): sending abandon, count=%d\n", my_name, count); count_abandon = rnd(abandon); count = 0; ferr = XMSG_ABANDON_(msgid[inxo]); util_check("XMSG_ABANDON_", ferr); } else { ferr = BMSG_BREAK_(msgid[inxo], results.u.s, TPT_REF2(phandle, inxs)); util_check("XMSG_BREAK_", ferr); } } } if (mq) { if ((inxl % 100) == 0) printf("client(%s): count=%d\n", my_name, inxl); } } for (inxs = 0; inxs < maxsp; inxs++) { ferr = msg_mon_close_process(TPT_REF2(phandle, inxs)); TEST_CHK_FEOK(ferr); } } else { ferr = XCONTROLMESSAGESYSTEM(XCTLMSGSYS_SETRECVLIMIT, XMAX_SETTABLE_RECVLIMIT); assert(ferr == XZFIL_ERR_OK); closes = 0; msg_count = 0; msg_mon_enable_mon_messages(true); // process requests for (;;) { do { lerr = XWAIT(LREQ, -1); lerr = BMSG_LISTEN_((short *) &sre, // sre 0, // listenopts 0); // listenertag } while (lerr == XSRETYPE_NOWORK); if (sre.sre_flags & XSRE_MON) { ferr = XMSG_READDATA_(sre.sre_msgId, // msgid recv_buffer[0], // reqdata BUFSIZ); // bytecount util_check("XMSG_READDATA_", ferr); MS_Mon_Msg *msg = (MS_Mon_Msg *) recv_buffer[0]; if (verbose) printf("server(%s): mon-msg type=%d\n", my_name, msg->type); if (msg->type == MS_MsgType_Close) { closes++; if (verbose) printf("server(%s): closes=%d\n", my_name, closes); } } else { msg_count++; if (verbose) printf("server(%s): msg-count=%d\n", my_name, msg_count); } recv_len = rnd(BUFSIZ); BMSG_REPLY_(sre.sre_msgId, // msgid NULL, // replyctrl 0, // replyctrlsize recv_buffer[0], // replydata recv_len, // replydatasize 0, // errorclass NULL); // newphandle if (closes >= maxcp) break; } } ferr = msg_mon_process_shutdown(); TEST_CHK_FEOK(ferr); util_test_finish(client); return 0; }
int main(int argc, char *argv[]) { bool client = false; bool client2 = false; int close_count; int cnid; int cpid; int ferr; bool fin = false; int inx; int lerr; int loop = 10; int oid; char *sname = (char *) "$srv"; BMS_SRE sre; bool verbose = false; TAD zargs[] = { { "-client", TA_Bool, TA_NOMAX, &client }, { "-client2", TA_Bool, TA_NOMAX, &client2 }, { "-loop", TA_Int, TA_NOMAX, &loop }, { "-server", TA_Ign, TA_NOMAX, NULL }, { "-v", TA_Bool, TA_NOMAX, &verbose }, { "-verbose", TA_Ign, TA_NOMAX, NULL }, { "", TA_End, TA_NOMAX, NULL } }; arg_proc_args(zargs, false, argc, argv); ferr = msg_init(&argc, &argv); TEST_CHK_FEOK(ferr); util_test_start(client); ferr = msg_mon_process_startup(true); // system messages TEST_CHK_FEOK(ferr); if (client) { msg_debug_hook("c", "c"); sprintf(cprog, "%s/%s", getenv("PWD"), argv[0]); for (inx = 0; inx < argc; inx++) { if (strcmp(argv[inx], "-client") == 0) argv[inx] = (char *) "-client2"; } for (inx = 0; inx < loop; inx++) { if (verbose) printf("cli: newproc, inx=%d\n", inx); sprintf(cname, "$cli%d", inx); cnid = -1; ferr = msg_mon_start_process(cprog, // prog cname, // name NULL, // ret_name argc, // argc argv, // argv TPT_REF(cphandle), // phandle false, // open NULL, // oid MS_ProcessType_Generic, // type 0, // priority false, // debug false, // backup &cnid, // nid &cpid, // pid NULL, // infile NULL); // outfile TEST_CHK_FEOK(ferr); } } else if (client2) { if (verbose) printf("cli: open\n"); ferr = msg_mon_open_process(sname, // name TPT_REF(sphandle), &oid); TEST_CHK_FEOK(ferr); } else { msg_mon_enable_mon_messages(true); close_count = 0; for (inx = 0; !fin; inx++) { do { lerr = XWAIT(LREQ, -1); lerr = BMSG_LISTEN_((short *) &sre, // sre 0, // listenopts 0); // listenertag } while (lerr == BSRETYPE_NOWORK); if (sre.sre_flags & XSRE_MON) { ferr = BMSG_READDATA_(sre.sre_msgId, // msgid recv_buffer, // reqdata BUFSIZ); // bytecount MS_Mon_Msg *msg = (MS_Mon_Msg *) recv_buffer; if (verbose) printf("srv: rcvd mon msg=%d, inx=%d\n", msg->type, inx); if (msg->type == MS_MsgType_Close) if (++close_count >= loop) fin = true; } if (verbose) printf("srv: reply, inx=%d\n", inx); BMSG_REPLY_(sre.sre_msgId, // msgid NULL, // replyctrl 0, // replyctrlsize NULL, // replydata 0, // replydatasize 0, // errorclass NULL); // newphandle } } ferr = msg_mon_process_shutdown(); TEST_CHK_FEOK(ferr); util_test_finish(client); return 0; }