Странный Неверный дескриптор соединения при добавлении в "proxy shared lib"? - PullRequest
2 голосов
/ 07 января 2011

Я делаю некоторый C-код в системе Solaris SPARC и почесываю голову из-за "несоответствия", обнаруженного в моем интеграционном тестировании.

Я провожу некоторые тесты в системе SAP и используюSAP RFCSDK, но SAP здесь вообще не мой вопрос ..... Мне интересно, если я пропускаю некоторые опции компиляции и т. д.

Позвольте мне попытаться объяснить:

Код клиента ->Общая библиотека (настраиваемая) -> Общая библиотека (SAP) -> SAP === работает на 100%

Код клиента -> Общая библиотека (настраиваемая PROXY) -> Общая библиотека (настраиваемая)-> Shared Lib (SAP) -> SAP == Дескриптор INVALID

Таким образом, не вдаваясь в подробности, вы когда-нибудь слышали о том, что какой-либо «дескриптор» становится недействительным только потому, что другой общий lib был"inbetween" клиент и "целевая совместно используемая библиотека"?

Совместно используемая библиотека PROXY, которая вызывает проблему с INVALID HANDLE, не делает ничего особенного, просто "пропускает"

#include <stdio.h>
#include <stdlib.h>
#include "saprfc_receiver_proxy.h"
#include "saprfc_receiver.h"

int saprfc_receiver_proxy_initialize(char *sap_hostname, char *sap_client,
       int sap_sysnbr, char *sap_language, char *sap_user, char *sap_password,
       int sap_rfctrace){
    return saprfc_receiver_initialize(sap_hostname, sap_client, sap_sysnbr,
               sap_language, sap_user, sap_password, sap_rfctrace);
}

int saprfc_receiver_proxy_beginTransaction(char *tid){
    return saprfc_receiver_beginTransaction(tid);
}

int saprfc_receiver_proxy_commitTransaction(char *tid){
    return saprfc_receiver_commitTransaction(tid);
}

int saprfc_receiver_proxy_rollbackTransaction(char *tid){
    return saprfc_receiver_rollbackTransaction(tid);
}

int saprfc_receiver_proxy_writeMessage(char *tid, char *buffer){
    return saprfc_receiver_writeMessage(tid, buffer);
}

int saprfc_receiver_proxy_openConnection(){
    return saprfc_receiver_openConnection();
}

int saprfc_receiver_proxy_closeConnection(){
    return saprfc_receiver_closeConnection();
}

Компиляция очень проста, вот общая библиотека lib, котораявызывает прямые разделяемые библиотеки SAP напрямую:

/usr/sfw/bin/gcc -m64 -R/usr/sfw/lib/64 -c -fPIC -I../include \
    -I../rfcsdk/include saprfc_receiver.c -o saprfc_receiver.o
/usr/sfw/bin/gcc -m64 -R/usr/sfw/lib/64 -shared -L../rfcsdk/lib/ \
    -o libsaprfc_receiver.so saprfc_receiver.o -lrfccm -lrfc

А вот прокси совместно используемой библиотеки lib:

/usr/sfw/bin/gcc -m64 -R/usr/sfw/lib/64 -c -fPIC -I../include \
    saprfc_receiver_proxy.c -o saprfc_receiver_proxy.o
/usr/sfw/bin/gcc -m64 -R/usr/sfw/lib/64 -shared -L../lib \
    -o libsaprfc_receiver_proxy.so saprfc_receiver_proxy.o -lsaprfc_receiver

Так есть ли какое-то "золотое правило" при использовании C, чтобы убедиться, что "разделяемые библиотеки между ними "вообще не влияют на состояние?

Извините, если мои объяснения плохие, я постараюсь редактировать этот пост позже с более подробной информацией ....

Суть в том, чточто если клиент напрямую вызывает разделяемую библиотеку (custom), то она работает, в тот момент, когда я добавляю ПРОСТОЙ прокси между дескриптором SAP, происходит плохо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...