tuxedo 跪求 在线等待 高手
FBFR32 *sendbuf, *rcvbuf;
string strResult;
tuxputenv("WSNADDR=//192.168.1.12:8080");
int i,j;
if ((i=tpinit(NULL))<0)
{
(void) fprintf(stderr, "Tpinit failed\n");
exit(-1);
}
sendbuf=(FBFR32 *) tpalloc("FML32",NULL,10000);
rcvbuf=(FBFR32 *) tpalloc("FML32",NULL,10000);
if (Fadd32(sendbuf,CODE,"A1021", 0) == -1)
{
(void)fprintf(stderr, "Failure to change CODE field -- %s\n",
tpfree(sendbuf);
tpfree(rcvbuf);
tpterm();
exit(1);
}
if (Fadd32(sendbuf,CODEID,"100001", 0) == -1)
{
(void)fprintf(stderr, "Failure to change CODEID field -- %s\n",
Fstrerror32(Ferror32));
tpfree(sendbuf);
tpfree(rcvbuf);
tpterm();
exit(1);
}
if (Fadd32(sendbuf,CODENAME,"wwwww", 0) == -1)
{
(void)fprintf(stderr, "Failure to change CODENAME field -- %s\n",
Fstrerror32(Ferror32));
tpfree(sendbuf);
tpfree(rcvbuf);
tpterm();
exit(1);
}
Fprint32(sendbuf);
i = tpcall("QUERY", (char *)sendbuf, 0, (char **)&rcvbuf, &j,TPNOBLOCK);
if(i < 0)
{
(void) fprintf(stderr, "Can't send request to service \n");
(void) fprintf(stderr, "Tperrno = %d\n", tperrno);
tpfree(sendbuf);
tpfree(rcvbuf);
tpterm();
exit(1);
}
char * strCODE;
char * strCODEID;
char * strCODENAME;
memset(strCODE,0,sizeof(strCODE));
memset(strCODEID,0,sizeof(strCODEID));
memset(strCODENAME,0,sizeof(strCODENAME));
Fprint32(rcvbuf);
Fget32(rcvbuf,CODE,i,(char *)strCODE,0);
Fget32(rcvbuf,CODEID,i,(char *)strCODEID,0);
Fget32(rcvbuf,CODENAME,i,(char *)strCODENAME,0);
tpfree((char *)my_str);
(void)tpterm();
问题:
i = tpcall("QUERY", (char *)sendbuf, 0, (char **)&rcvbuf, &j,TPNOBLOCK);
此函数执行就会出现一直停在这,不报错。
查看服务端。 调用成功,也有返回。 但是客户端一直停在这个函数里。
也就是说
rcvbuf 这个拿不到值。
我用异步调用
ret = tpacall("QUERY", (char *)sendbuf, 0, 0);
if(tpgetrply(&ret,(char **)&rcvbuf, &rcvlen, (long)0)== -1)
userlog("tpgetrply() failure:cd=%ld,errstr=%s\n",ret,tpstrerror(tperrno));
tpgetrply
这个函数会一直停在这。 不报错。 和这个tpcall一样。
哪位tuxedo 大神,知道什么原因。求赐教。。。。
万分感谢。