Exemplo n.º 1
0
void client(int clinx, char *name, long id, int inx) {
    int              ferr;
    int              lerr;
    int              msgid;
    Util_AA<char>    recv_buffer(BUFSIZ);
    Util_AA<short>   recv_buffer3(BUFSIZ);
    RT               results;
    Util_AA<char>    send_buffer(BUFSIZ);
    Util_AA<short>   send_buffer2(BUFSIZ);
    int              send_len;
    MS_SRE_LDONE     sre_ldone;

    sprintf(&send_buffer, "hello, greetings from %s, name=%s, id=%ld, inx=%d",
            my_name, name, id, inx);
    while (clinx >= 0) {
        strcat(&send_buffer, "!");
        clinx--;
    }
    send_len = (int) strlen(&send_buffer) + 1;
    ferr = XMSG_LINK_(TPT_REF(phandle),                     // phandle
                      &msgid,                      // msgid
                      &send_buffer2,               // reqctrl
                      (ushort) (inx & 1),          // reqctrlsize
                      &recv_buffer3,               // replyctrl
                      1,                           // replyctrlmax
                      &send_buffer,                // reqdata
                      (ushort) send_len,           // reqdatasize
                      &recv_buffer,                // replydata
                      BUFSIZ,                      // replydatamax
                      (SB_Tag_Type) &send_buffer,  // linkertag
                      0,                           // pri
                      0,                           // xmitclass
                      XMSG_LINK_LDONEQ);           // linkopts
    util_check("XMSG_LINK_", ferr);
    do {
        lerr = XWAIT(LDONE, -1);
        TEST_CHK_WAITIGNORE(lerr);
        lerr = XMSG_LISTEN_((short *) &sre_ldone, // sre
                            0,                    // listenopts
                            0);                   // listenertag
    } while (lerr == XSRETYPE_NOWORK);
    assert(lerr == XSRETYPE_LDONE);
    assert(sre_ldone.sre_linkTag == (SB_Tag_Type) &send_buffer);
    ferr = XMSG_BREAK_(msgid, results.u.s, TPT_REF(phandle));
    util_check("XMSG_BREAK_", ferr);
    assert(results.u.t.ctrl_size == (uint) (inx & 1));
    assert(results.u.t.data_size > (strlen(&send_buffer) + 14));
    assert(results.u.t.errm == RT_DATA_RCVD); // data
    printf("%s\n", &recv_buffer);
}
Exemplo n.º 2
0
void *client_thr(void *arg) {
    Util_AA<char>   event_data(MS_MON_MAX_SYNC_DATA);
    int             event_len;
    int             ferr;
    int             inx;
    int             msgid;
    Util_AA<char>   recv_buffer(BUFSIZ);
    Util_AA<short>  recv_buffer3(BUFSIZ);
    RT              results;
    Util_AA<char>   send_buffer(BUFSIZ);
    Util_AA<short>  send_buffer2(BUFSIZ);
    int             send_len;
    long            t_elapsed;
    struct timeval  t_start;
    struct timeval  t_stop;
    int             whoami = inxc++;

    arg = arg; // touch
    if (event) {
        ferr = msg_mon_event_wait(1, &event_len, &event_data);
        TEST_CHK_FEOK(ferr);
    }
    util_time_timer_start(&t_start);
    for (inx = 0; inx < loop; inx++) {
        if (txrate) {
            if ((inx % 100) == 0) {
                util_time_timer_stop(&t_stop);
                t_elapsed = (t_stop.tv_sec * 1000000 + t_stop.tv_usec) -
                            (t_start.tv_sec * 1000000 + t_start.tv_usec);
                t_elapsed = t_elapsed / 1000;
                if (inx == 0)
                    printf("%s: c-%d\n", name, whoami);
                else
                    printf("%s: c-%d, inx=%d, msg/ms=%ld\n",
                           name, whoami, inx, t_elapsed / inx);
            }
        } else if (mq) {
            if ((inx % 100) == 0)
                printf("%s: c-%d, inx=%d\n", name, whoami, inx);
        } else if (!quiet)
            printf("c-%d, inx=%d\n", whoami, inx);
        fflush(stdout);
        sprintf(&send_buffer, "hello, greetings from %s-%d, inx=%d",
                my_name, whoami, inx);
        send_len = (int) strlen(&send_buffer) + 1;
        if (verbose)
            printf("c-%d: sending %s\n", whoami, &send_buffer);
        ferr = XMSG_LINK_(TPT_REF(phandle),                     // phandle
                          &msgid,                      // msgid
                          &send_buffer2,               // reqctrl
                          (ushort) (inx & 1),          // reqctrlsize
                          &recv_buffer3,               // replyctrl
                          (ushort) 1,                  // replyctrlmax
                          &send_buffer,                // reqdata
                          (ushort) send_len,           // reqdatasize
                          &recv_buffer,                // replydata
                          (ushort) BUFSIZ,             // replydatamax
                          0,                           // linkertag
                          0,                           // pri
                          0,                           // xmitclass
                          0);                          // linkopts
        if (!abortserver)
            util_check("XMSG_LINK_", ferr);
        ferr = XMSG_BREAK_(msgid, results.u.s, TPT_REF(phandle));
        if (!abortserver)
            util_check("XMSG_BREAK_", ferr);
        if (!abortserver) {
            if (verbose)
                printf("c-%d: received %s\n", whoami, &recv_buffer);
            assert(results.u.t.ctrl_size == (uint) (inx & 1));
            assert(results.u.t.data_size == 100);
            assert(results.u.t.errm == RT_DATA_RCVD); // data
            if (inx == (loop - 1)) {
                if (maxcp > 1)
                    printf("%s: %s\n", name, &recv_buffer);
                else
                    printf("%s\n", &recv_buffer);
            }
        }
    }
    return NULL;
}
Exemplo n.º 3
0
void client(int clinx, char *name, long id, int inx) {
    int            ferr;
    int            lerr;
    bool           ok;
    int            match;
    Util_AA<int>   msgid(MAX_SENDS);
    Util_AA<char>  recv_buffer(MAX_SENDS * BUFSIZ);
    Util_AA<short> recv_buffer3(MAX_SENDS * BUFSIZ);
    RT             results;
    int            send;
    Util_AA<char>  send_buffer(MAX_SENDS * BUFSIZ);
    Util_AA<short> send_buffer2(MAX_SENDS * BUFSIZ);
    int            send_len;
    MS_SRE_LDONE   sre_ldone;

    for (send = 0; send < MAX_SENDS; send++) {
        sprintf(&send_buffer.ip_v[send * BUFSIZ],
                "hello, greetings from %s, name=%s, id=%ld, inx=%d, send=%d",
                my_name, name, id, inx, send);
        while (clinx >= 0) {
            strcat(&send_buffer.ip_v[send * BUFSIZ], "!");
            clinx--;
        }
        send_len = (int) strlen(&send_buffer.ip_v[send * BUFSIZ]) + 1;
        ferr =
          XMSG_LINK_(TPT_REF(phandle),                         // phandle
                            &msgid.ip_v[send],                        // msgid
                            &send_buffer2.ip_v[send * BUFSIZ],        // reqctrl
                            (ushort) (inx & 1),                       // reqctrlsize
                            &recv_buffer3.ip_v[send * BUFSIZ],        // replyctrl
                            1,                                        // replyctrlmax
                            &send_buffer.ip_v[send * BUFSIZ],         // reqdata
                            (ushort) send_len,                        // reqdatasize
                            &recv_buffer.ip_v[send * BUFSIZ],         // replydata
                            BUFSIZ,                                   // replydatamax
                            (SB_Tag_Type)                             // linkertag
                              &send_buffer.ip_v[send * BUFSIZ],
                            0,                                        // pri
                            0,                                        // xmitclass
                            XMSG_LINK_LDONEQ);                        // linkopts
        util_check("XMSG_LINK_", ferr);
    }
    for (send = 0; send < MAX_SENDS;) {
        lerr = XWAIT(LDONE, -1);
        TEST_CHK_WAITIGNORE(lerr);
        for (;;) {
            lerr = XMSG_LISTEN_((short *) &sre_ldone, // sre
                                0,                    // listenopts
                                0);                   // listenertag
            if (lerr == XSRETYPE_NOWORK)
                break;
            send++;
            assert(lerr == XSRETYPE_LDONE);
            ok = false;
            for (match = 0; match < MAX_SENDS; match++) {
                if (sre_ldone.sre_linkTag ==
                    (SB_Tag_Type) &send_buffer.ip_v[match * BUFSIZ]) {
                    ok = true;
                    break;
                }
            }
            assert(ok);
            ferr = XMSG_BREAK_(msgid.ip_v[match],
                               results.u.s,
                               TPT_REF(phandle));
            util_check("XMSG_BREAK_", ferr);
            assert(results.u.t.ctrl_size == (uint) (inx & 1));
            assert(results.u.t.data_size >
                   (strlen(&send_buffer.ip_v[match * BUFSIZ]) + 14));
            assert(results.u.t.errm == RT_DATA_RCVD); // data
            printf("%s\n", &recv_buffer.ip_v[match * BUFSIZ]);
        }
    }
}