簡體   English   中英

Linux和Solaris之間的RPC調用

[英]RPC calls between Linux and Solaris

我有一個在Solaris中運行的RPC服務器。 我有一個在Solaris上運行良好的RPC客戶端。 當我在Linux(RHEL 5或6)中編譯並運行相同的代碼時,在服務器中解碼參數時出現錯誤。 我應該如何找出問題?

代碼的一部分是:

    /* now allocate a LoopListRequestStruct and fill it with request data */

    llrs = malloc(sizeof(LoopListRequestStruct));

    fill_llrs(llrs);

    /* Now, make the client request to the bossServer   */

    client_call_status = clnt_call(request_client, ModifyDhctState,
            (xdrproc_t)xdr_LoopListRequestStruct,
            (caddr_t)llrs, 
            (xdrproc_t)xdr_void,
            0,
            dummy_timeval
        );

void fill_llrs(LoopListRequestStruct* llrs)
{

    Descriptor_Loop* dl = 0;
    DhctState_d *dhct_state_ptr = 0;
    PackageAuthorization_d *pkg_auth_ptr = 0; 

    llrs->TRANS_NUM = 999999;   /* strictly arbitraty, use whatever you want */
                                /* the bossServer simply passes this back in */
                                /* in the response you use it to match       */
                                /* request/response if you want or you can   */
                                /* choose to ignore it if you want           */

    /* now set the response program number, this is the program number of  */
    /* transient program that was set up using the svc_reg_utils.[ch]      */
    /* it is that program that the response will be sent to                */

    llrs->responseProgramNum = response_program_number; 

    /* now allocate some memory for the data structures that will actually */
    /* carry the request data */

    llrs->ARG_PTR = malloc(sizeof(LoopListRequestArgs));

    dl = llrs->ARG_PTR->loopList.Loop_List_val;

    /* we are using a single descriptor loop at a time, this should always */
    /* be the case */

    llrs->ARG_PTR->loopList.Loop_List_len = 1;
    llrs->ARG_PTR->loopList.Loop_List_val = malloc(sizeof(Descriptor_Loop));

    /* now allocate memory and set the size for the ModifyDhctConfiguration */
    /* this transaction always has 3 descriptors, the DhctMacAddr_d, the    */
    /* DhctState_d, and the PackageAuthorization_d                          */

    dl = llrs->ARG_PTR->loopList.Loop_List_val;
    dl->Descriptor_Loop_len = 2;
    dl->Descriptor_Loop_val = 
        malloc((2 * sizeof(Resource_descriptor_union)));

    /* now, populate each descriptor */
    /* the order doesn't really matter I'm just doing it in the order I    */
    /* always have done */

    /* first the mac address descriptor */

    dl->Descriptor_Loop_val->type = 
        dhct_mac_addr_type;

    strcpy(
    dl->Descriptor_Loop_val[0].Resource_descriptor_union_u.dhctMacAddr.dhctMacAddr,
        dhct_mac_addr
    );

    /* second the dhct state descriptor */

    dl->Descriptor_Loop_val[1].type = 
        dhct_state_type;

    dhct_state_ptr =
        &(dl->Descriptor_Loop_val[1].Resource_descriptor_union_u.dhctState);

    if(dis_enable)
        dhct_state_ptr->disEnableFlag = DIS_Enabled;
    else
        dhct_state_ptr->disEnableFlag = DIS_Disabled;

    if(dms_enable)
        dhct_state_ptr->dmsEnableFlag = DMS_Enabled;
    else
        dhct_state_ptr->dmsEnableFlag = DMS_Disabled;

    if(analog_enable)
        dhct_state_ptr->analogEnableFlag = AEF_Enabled;
    else
        dhct_state_ptr->analogEnableFlag = AEF_Disabled;

    if(ippv_enable)
        dhct_state_ptr->ippvEnableFlag = IEF_Enabled;
    else
        dhct_state_ptr->ippvEnableFlag = IEF_Disabled;

    dhct_state_ptr->creditLimit = credit_limit;
    dhct_state_ptr->maxIppvEvents = max_ippv_events;

    /* we don't currently use the powerkey pin, instead we use an      */
    /* application layer pin for purchases and blocking so always turn */   
    /* pinEnable off */

    dhct_state_ptr->pinEnable = PE_Disabled;
    dhct_state_ptr->pin = 0;


    if(fast_refresh_enable)
        dhct_state_ptr->fastRefreshFlag = FRF_Enabled;
    else
        dhct_state_ptr->fastRefreshFlag = FRF_Disabled;

    dhct_state_ptr->locationX = location_x;
    dhct_state_ptr->locationY = location_y;

}

Set PIN = ""; //而不是零,它將起作用:)

前端和客戶端的c編譯器之間都有區別。 他們對弦的處理不同。

BR,Chandan Chhabra

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM