int task_main(void* args) { int i; int eid; int size; int rts; char* ubuf; if (argc < 4) { printf("usage: thr_sender <connect-to> <msg-size> <roundtrips>\n"); return 0; } size = atoi(argv[2]); rts = atoi(argv[3]); BUG_ON((eid = sp_endpoint(SP_REQREP, SP_REQ)) < 0); BUG_ON(sp_connect(eid, argv[1]) < 0); BUG_ON(sp_send(eid, ualloc(size)) != 0); for (i = 0; i < rts; i++) { BUG_ON(sp_send(eid, ualloc(size)) != 0); } BUG_ON(sp_recv(eid, &ubuf) != 0); ufree(ubuf); sp_close(eid); return 0; }
/* **++ ** ROUTINE: sp_once ** ** FUNCTIONAL DESCRIPTION: ** ** ** RETURNS: cond_value, longword (unsigned), write only, by value ** ** PROTOTYPE: ** ** sp_once(struct dsc$descriptor *cmd, struct dsc$descriptor *rcvstr, ** int *rcvlen) ** ** IMPLICIT INPUTS: None. ** ** IMPLICIT OUTPUTS: None. ** ** COMPLETION CODES: ** SS$_NORMAL: normal successful completion ** SS$_NONEXPR: subprocess doesn't exist any more ** ** SIDE EFFECTS: None. ** **-- */ void sp_once (void *cmd, void (*actrtn)(void *, struct dsc$descriptor *), void *param) { struct ONCE ctx; int status; struct dsc$descriptor eomcmd; static char *eom = "MMK___SP_ONCE_EOM"; static $DESCRIPTOR(eomfao, "WRITE SYS$OUTPUT \"!AZ\""); memset(&ctx, 0, sizeof(struct ONCE)); ctx.actrtn = actrtn; ctx.param = param; ctx.eom = eom; ctx.eom_len = sizeof(eom)-1; INIT_DYNDESC(eomcmd); lib$sys_fao(&eomfao, 0, &eomcmd, eom); status = sp_open(&ctx.spctx, cmd, sp_once_ast, &ctx); if (OK(status)) { status = sp_send(&ctx.spctx, &eomcmd); if (OK(status)) { do { sys$hiber(); } while (!ctx.command_complete); } sp_close(&ctx.spctx); } str$free1_dx(&eomcmd); } /* sp_once */
int main(int argc, char** argv) { int i; int eid; int count; int size; char* ubuf; int thr; double mbs; uint64_t st, lt; if (argc < 3) { printf("usage: thr_recver <bind-to> <msg-count>\n"); return 0; } count = atoi(argv[2]); BUG_ON((eid = sp_endpoint(SP_REQREP, SP_REP)) < 0); BUG_ON(sp_listen(eid, argv[1]) < 0); BUG_ON(sp_recv(eid, &ubuf) != 0); size = 0; st = gettimeofms(); while (count > 0) { BUG_ON(sp_recv(eid, &ubuf) != 0); count--; size += usize(ubuf); if (count) { ufree(ubuf); } else { BUG_ON(sp_send(eid, ubuf) != 0); } } lt = gettimeofms(); thr = atoi(argv[2]) * 1000 / (lt - st); mbs = (double)(size * 8 / (lt - st)) / 1024; printf("message size: %d [B]\n", size); printf("throughput: %d [msg/s]\n", thr); printf("throughput: %.3f [Mb/s]\n", mbs); sp_close(eid); return 0; }
int main (int argc, char **argv) { int i; int eid; char *ubuf; if (argc < 2) { printf ("usage: lat_recver <bind-to>\n"); return 0; } BUG_ON ((eid = sp_endpoint (SP_REQREP, SP_REP)) < 0); BUG_ON (sp_listen (eid, argv[1]) < 0); while (1) { BUG_ON (sp_recv (eid, &ubuf) != 0); BUG_ON (sp_send (eid, ubuf)); } sp_close (eid); return 0; }
static VALUE rb_sp_send (VALUE self, VALUE eid, VALUE msg) { int _eid = FIX2INT (eid); int rc; VALUE rb_hdr = 0; char *hdr = 0; char *ubuf = ubuf_alloc (RSTRING (msg)->len); memcpy (ubuf, RSTRING (msg)->ptr, ubuf_len (ubuf)); /* How can i checking the valid rb_values, f*****g the ruby extension here */ if ((rb_hdr = rb_iv_get (msg, "@hdr")) != 4) { Data_Get_Struct (rb_hdr, char, hdr); if (hdr) ubufctl (hdr, SCOPY, ubuf); } if ((rc = sp_send (_eid, ubuf))) ubuf_free (ubuf); return INT2FIX (rc); }
int main () { int rc; int rep; int req1; int req2; int resend_ivl; char buf [7]; /* Test req/rep with raw socket types. */ rc = sp_init (); errno_assert (rc == 0); rep = sp_socket (AF_SP_RAW, SP_REP); errno_assert (rep != -1); rc = sp_bind (rep, "inproc://a"); errno_assert (rc >= 0); req1 = sp_socket (AF_SP_RAW, SP_REQ); errno_assert (req1 != -1); rc = sp_connect (req1, "inproc://a"); errno_assert (rc >= 0); req2 = sp_socket (AF_SP_RAW, SP_REQ); errno_assert (req2 != -1); rc = sp_connect (req2, "inproc://a"); errno_assert (rc >= 0); rc = sp_send (req2, "ABC", 3, 0); errno_assert (rc >= 0); sp_assert (rc == 3); rc = sp_recv (rep, buf, sizeof (buf), 0); errno_assert (rc >= 0); sp_assert (rc == 7); rc = sp_send (rep, buf, 7, 0); errno_assert (rc >= 0); sp_assert (rc == 7); rc = sp_recv (req2, buf, sizeof (buf), 0); errno_assert (rc >= 0); sp_assert (rc == 3); rc = sp_send (req1, "ABC", 3, 0); errno_assert (rc >= 0); sp_assert (rc == 3); rc = sp_recv (rep, buf, sizeof (buf), 0); errno_assert (rc >= 0); sp_assert (rc == 7); rc = sp_send (rep, buf, 7, 0); errno_assert (rc >= 0); sp_assert (rc == 7); rc = sp_recv (req1, buf, sizeof (buf), 0); errno_assert (rc >= 0); sp_assert (rc == 3); rc = sp_close (rep); errno_assert (rc == 0); rc = sp_close (req1); errno_assert (rc == 0); rc = sp_close (req2); errno_assert (rc == 0); rc = sp_term (); errno_assert (rc == 0); /* Test req/rep with full socket types. */ rc = sp_init (); errno_assert (rc == 0); rep = sp_socket (AF_SP, SP_REP); errno_assert (rep != -1); rc = sp_bind (rep, "inproc://a"); errno_assert (rc >= 0); req1 = sp_socket (AF_SP, SP_REQ); errno_assert (req1 != -1); rc = sp_connect (req1, "inproc://a"); errno_assert (rc >= 0); req2 = sp_socket (AF_SP, SP_REQ); errno_assert (req2 != -1); rc = sp_connect (req2, "inproc://a"); errno_assert (rc >= 0); rc = sp_send (rep, "ABC", 3, 0); sp_assert (rc == -1 && sp_errno () == EFSM); rc = sp_recv (req1, buf, sizeof (buf), 0); sp_assert (rc == -1 && sp_errno () == EFSM); rc = sp_send (req2, "ABC", 3, 0); errno_assert (rc >= 0); sp_assert (rc == 3); rc = sp_recv (rep, buf, sizeof (buf), 0); errno_assert (rc >= 0); sp_assert (rc == 3); rc = sp_send (rep, buf, 3, 0); errno_assert (rc >= 0); sp_assert (rc == 3); rc = sp_recv (req2, buf, sizeof (buf), 0); errno_assert (rc >= 0); sp_assert (rc == 3); rc = sp_send (req1, "ABC", 3, 0); errno_assert (rc >= 0); sp_assert (rc == 3); rc = sp_recv (rep, buf, sizeof (buf), 0); errno_assert (rc >= 0); sp_assert (rc == 3); rc = sp_send (rep, buf, 3, 0); errno_assert (rc >= 0); sp_assert (rc == 3); rc = sp_recv (req1, buf, sizeof (buf), 0); errno_assert (rc >= 0); sp_assert (rc == 3); rc = sp_close (rep); errno_assert (rc == 0); rc = sp_close (req1); errno_assert (rc == 0); rc = sp_close (req2); errno_assert (rc == 0); rc = sp_term (); errno_assert (rc == 0); /* Test re-sending of the request. */ rc = sp_init (); errno_assert (rc == 0); rep = sp_socket (AF_SP, SP_REP); errno_assert (rep != -1); rc = sp_bind (rep, "inproc://a"); errno_assert (rc >= 0); req1 = sp_socket (AF_SP, SP_REQ); errno_assert (req1 != -1); rc = sp_connect (req1, "inproc://a"); errno_assert (rc >= 0); resend_ivl = 100; rc = sp_setsockopt (req1, SP_REQ, SP_RESEND_IVL, &resend_ivl, sizeof (resend_ivl)); errno_assert (rc == 0); rc = sp_send (req1, "ABC", 3, 0); errno_assert (rc >= 0); sp_assert (rc == 3); rc = sp_recv (rep, buf, sizeof (buf), 0); errno_assert (rc >= 0); sp_assert (rc == 3); rc = sp_recv (rep, buf, sizeof (buf), 0); errno_assert (rc >= 0); sp_assert (rc == 3); rc = sp_close (req1); errno_assert (rc == 0); rc = sp_close (rep); errno_assert (rc == 0); rc = sp_term (); errno_assert (rc == 0); return 0; }