OpenTP1 Version 7 TP1/Client User's Guide TP1/Client/W, TP1/Client/P
This subsection shows a coding example of a CUP that can operate in a multi-thread environment. This coding example is a program to call an SPP that echoes back a message sent from the CUP.
000010 #include <stdio.h>
000020 #include <dcvclt.h>
000030 #include <dcvrpc.h>
000040 #include <pthread.h>
000050 #include <sys/errno.h>
000060 #define BUFSIZE 512
000070 #define SERVICE "spp01"
000080 #define THDMAX 5
000090
000100 void *CUP_thread(void *arg)
000110 {
000120 char in[BUFSIZE];
000130 DCULONG in_len;
000140 char out[BUFSIZE];
000150 DCULONG out_len;
000160 int rc = DC_OK;
000170 DCCLT_ID cltid;
000180 int myid;
000190
000200 myid = (int)arg;
000210
000220 /* Client user authentication request */
000230 if ((rc = dc_clt_cltin_s(NULL, &cltid, NULL, NULL,
000240 "user01", "puser01", NULL, DCNOFLAGS)) != DC_OK) {
000250 printf("cup%d: dc_clt_cltin failed. CODE=%d\n", myid, rc);
000260 goto PROG_EXIT;
000270 }
000280
000290 /* RPC-OPEN (RPC environment initialization) */
000300 if ((rc = dc_rpc_open_s(cltid, DCNOFLAGS)) != DC_OK) {
000310 printf("cup%d: dc_rpc_open failed. CODE=%d\n", myid, rc);
000320 goto PROG_END;
000330 }
000340
000350 /* RPC-CALL (RPC execution) */---*/
000360 strcpy(in, "HELLO SPP !!");
000370 in_len = strlen(in) + 1;
000380 out_len = sizeof(out);
000390 if ((rc = dc_rpc_call_s(cltid, SERVICE, "echo", in, &in_len,
000400 out, &out_len, DCNOFLAGS)) != DC_OK) {
000410 printf("cup%d: dc_rpc_call failed. CODE=%d\n", myid, rc);
000420 goto PROG_END;
000430 }
000440 printf("%s\n", out);
000450 PROG_END:
000460
000470 /* RPC-CLOSE (RPC environment release) */
000480 dc_rpc_close_s(cltid, DCNOFLAGS);
000490
000500 PROG_EXIT:
000510 /* Client user authentication release */
000520 dc_clt_cltout_s(cltid, DCNOFLAGS);
000530
000540 /* Thread termination */
000550 pthread_exit(arg);
000560 }
000570
000580 main()
000590 {
000600 int i;
000610 int rc;
000620 int exit_value;
000630 pthread_t threads[THDMAX];
000640
000650 /* Thread creation */
000660 for (i = 1; i < THDMAX; i++) {
000670 rc = pthread_create((pthread_t *)&threads[i],
000680 NULL,
000690 CUP_thread,
000700 (void *)i);
000710 if (rc < 0) {
000720 printf("cup0: pthread_create failed. CODE=%d\n", errno);
000730 }
000740 }
000750
000760 /* Wait for thread termination */
000770 for (i = 1; i < THDMAX; i++) {
000780 rc = pthread_join(threads[i], (void **)&exit_value);
000790 if (rc < 0) {
000800 printf("cup0: pthread_join failed.CODE=%d\n", errno);
000810 }
000820 }
000830 }
All Rights Reserved. Copyright (C) 2006, 2009, Hitachi, Ltd.