int tpcall(char *svc, char *idata, long ilen, char **odata, long?? *olen, long flags)
描述:客戶端同步調用服務端的名為svc的SERVICE,
參數:
*svc:SERVICE的名稱
char *idata: 輸入緩沖區的地址,客戶端傳給服務端的參數放在該緩沖區內
long ilen:?? 輸入緩沖區的長度
char **odata? 輸出緩沖區的地址,服務端傳給客戶端的結果放在該緩沖區內
long?? *olen:輸出緩沖區的長度??
long flags:? 調用標志,由以下幾個:
TPNOTRAN
如果調用svc的客戶端當前在TRANSACTION方式下,那么svc不參與當前的TRANSACTION。
?
TPNOCHANGE
如果服務端返回的緩沖區類型與客戶端定義的緩沖區(odata)類型不一致,默認情況下,odata會轉換成與服務端返回的緩沖區類型一致的類型,如果設置了該FLAG,那么當出現這種情況時,不進行緩沖區類型轉換,并且會保錯。
?
TPNOBLOCK
默認情況下,
如果客戶端有阻塞條件存在(如CLIENT的TCP/IP中的緩沖區滿,磁盤I/O忙等),那么客戶端會阻塞在那里,直到阻塞消除或超時出錯。如果設置了
TPNOBLOCK,當客戶端有阻塞條件存在時,TPCALL()會立刻返回并報錯.
注意TPNOBLOCK只對發送請求時起作用,如果在接收服務端返回的結果時有阻塞條件存在,客戶端會在那里等待,直到阻塞消除或超時出錯
?
TPNOTIME
如果客戶端有阻塞條件存在,客戶端會一直阻塞在那里,即使到了超時時間也不返回,但如果該客戶端是在TRANSACTION模式下,當到了
事務的超時時間,還是會報超時錯誤并返回。
?
TPSIGRSTRT
如果在進行系統調用時,被信號中斷,該系統調用會重新進行。
?
調用成功返回0,失敗返回-1, 錯誤號保存在全局變量tperrno中。
?
int tpacall(char *svc, char *data, long len, long flags)
描述:? 客戶端異步調用服務端的名為svc的SERVICE,不等服務端返回結果,程序可繼續往
下走,在某個地方調用tpgetrply()取的服務端的返回
參數:
char *svc, char *data, long len參數的含義與tpcall()中的一樣
flags
可設置為:TPNOTRAN, TPNOREPLY, TPNOBLOCKTPNOTIME, TPSIGRSTRT.
TPNOTRAN, TPNOBLOCKTPNOTIME, TPSIGRSTRT
的含義與
與
tpcall()
中的一樣
TPNOREPLY:調用
tpacall()的客戶端不想接收SEVER端的應答。如果設置了
TPNOREPLY:服務端不會給該
客戶端發送應答。
返回值: 失敗返回-1,成功返回一個HANDLER,可作為tpgetrply的參數,用于取應答
int tpgetrply(int *cd, char **data, long *len, long flags)
描述:取出服務端對tpacall()的應答。
參數: cd tpacall()返回的HANDLER
char **data返回緩沖區的地址,服務端傳給客戶端的結果放在該緩沖區內
long?? *len:返回緩沖區的長度
flags:
可以是:TPNOBLOCK, TPNOTIME,TPSIGRSTRT,TPGETANY(不管
cd的值,從服務
器的應答隊列中取第一個可用的消息
),TPNOCHANGE
返回值: 失敗返回-1,錯誤號保存在全局變量tperrno中。
?
int tpcancel(int handle)
描述: 如果當前的程序不處于事務模式中,取消對tpacall()的應答, 如果處于事務模式
中,則不能取消對tpacall()的應答,該調用會失敗.
參數: tpacall()返回的HANDLER
返回值: 失敗返回-1,錯誤號保存在全局變量tperrno中。
int tpgprio()
描述:返回最近發送(tpcall(),tpacall())或接收(tpgetrply())的一個消息的優先級
參數:無
返回值: 1-100消息的優先級,值越高, 優先級越高
??????? 失敗返回-1, 錯誤號保存在全局變量tperrno中。
?
struct {
int hdl; /* handle*/
int pr; /* priority*/
} pa[SIZE];
for (i=0; i<requests; i++) {
/* Determine service and data for request */
pa [i].hdl = tpacall(Svc, buf, len, flags);
/* Save priority used to send request */
pa[i].pr = tpgprio();
}
/* Use qsort(3) routine to sort handles in priority order */
qsort((char*) pa, requests, sizeof(pa[0]), cmpfcn);
for (i=0; i< requests; i++) {
tpgetrply(&pa[i].hdl, &rbufp, &rlen, rflags);
}
?
int tpsprio (int prio, long flags)
描述: 設置下一個要發送的消息的優先級
參數: 0-
prio為
相對值, 設置下一個要發送的消息的優先級為現在的優先級加上
prio
????
TPABSOLUTE: prio為絕對值,
設置下一個要發送的消息的優先級為
prio
返回值: 失敗返回-1,錯誤號保存在全局變量tperrno中。
5
與請求錯誤處理有關的
ATMI
char *tpstrerror(int tperrno)
描述:返回
錯誤號為tperrno的錯誤描述
參數:
tperrno:在atmi.h中定義的全局變量,用于標識錯誤號,類似于C中的errno
返回值: 失敗返回NULL,成功返回
錯誤號為tperrno的錯誤描述.
int tperrordetail(long flags)
描述:
返回當前進程或線程最近調用ATMI的出錯的更詳細的描述
參數:設為0
返回值: 如果沒有錯誤返回0,有錯誤返回
錯誤描述號
?
char * tpstrerrordetail(int err, long flags)
描述:
返回錯誤描述號
err
的
詳細描述信息
參數:
err
: tperrordetail()的返回值,
flags: 設為0
返回值: 失敗返回NULL,成功返回
詳細描述信息。