GetBinderyObjectID

Netware 6.0 sp5, есть эмуляция Bindery.
Коллега программист в своих программах использует удобную ему функцию для определения сатуса пользователя (подключен/не подключен к серверу). Для этого использует функцию: GetBinderyObjectID(USER, User, &UsID). Полный текст одной из программ прилагается ниже. При наличии РЕАЛЬНОГО коннекта на сервере (станция вполне успешно работает), программа с вероятностью 50/50 определяет статус как подключен, или как не подключен. От сетевого клиента не зависит. Симптом может исчезнуть после перезагрузки станции. Перезагрузка сервера, или выполнения Dsrepair как правило устраняет симптом.
Хотелось бы понять причину, по которой GetBinderyObjectID(USER, User, &UsID) может отрабатывать с “ошибкой”.
Исходный текст программы.
/* +--------------------------------------------------------------+
Программа:
USER - Пользователь подключен к сети ?
Компилятор Borland C++ 3.1
+-------------------------------------------------------+ */
#include <conio>
#include <stdlib>
#include <string>
#include <stdio>
#include <ctype>
#include <io>
#include <dos>
#include "netware.h"
/* +---------------- M a i n -------------------------+ */
int main(int argc, char** argv)
{
int rc, nS;
word Ncon;
long UsID;
byte ConLst[100];
char User[48];
char ServTab[384];
char Server[16];
char *Ts;
if ( argc <2> 2) {
strcpy(Server, argv[2]);
GetFileServerTable(ServTab);
Ts = &ServTab[0];
for (nS = 1; (nS < 9) && *Ts; ++nS) {
if (stricmp(Server, Ts) == 0)
break;
Ts += 48;
}
if (*Ts)
SetPreferredConnectionID(nS);
else {
fprintf(stdout, "Неизвестный сервер %s\n", Server);
return(4);
}
}
if ((rc = GetBinderyObjectID(USER, User, &UsID)) != 0) {
fprintf(stdout, "Пользователя %s нет на сервере!\n", User);
return(3);
}
rc = GetObjectConnectionNumbers(USER, User, &Ncon, ConLst);
if (rc == 0) {
if (Ncon) {
fprintf(stdout, "Пользователь %s подключен!\n", User);
return(0);
}
else {
fprintf(stdout, "Пользователь %s НЕ подключен!\n", User);
return(2);
}
}
else
return(rc);
}
/* +--------------- Конец файла USER.C -----------------+ */
Коллега программист в своих программах использует удобную ему функцию для определения сатуса пользователя (подключен/не подключен к серверу). Для этого использует функцию: GetBinderyObjectID(USER, User, &UsID). Полный текст одной из программ прилагается ниже. При наличии РЕАЛЬНОГО коннекта на сервере (станция вполне успешно работает), программа с вероятностью 50/50 определяет статус как подключен, или как не подключен. От сетевого клиента не зависит. Симптом может исчезнуть после перезагрузки станции. Перезагрузка сервера, или выполнения Dsrepair как правило устраняет симптом.
Хотелось бы понять причину, по которой GetBinderyObjectID(USER, User, &UsID) может отрабатывать с “ошибкой”.
Исходный текст программы.
/* +--------------------------------------------------------------+
Программа:
USER - Пользователь подключен к сети ?
Компилятор Borland C++ 3.1
+-------------------------------------------------------+ */
#include <conio>
#include <stdlib>
#include <string>
#include <stdio>
#include <ctype>
#include <io>
#include <dos>
#include "netware.h"
/* +---------------- M a i n -------------------------+ */
int main(int argc, char** argv)
{
int rc, nS;
word Ncon;
long UsID;
byte ConLst[100];
char User[48];
char ServTab[384];
char Server[16];
char *Ts;
if ( argc <2> 2) {
strcpy(Server, argv[2]);
GetFileServerTable(ServTab);
Ts = &ServTab[0];
for (nS = 1; (nS < 9) && *Ts; ++nS) {
if (stricmp(Server, Ts) == 0)
break;
Ts += 48;
}
if (*Ts)
SetPreferredConnectionID(nS);
else {
fprintf(stdout, "Неизвестный сервер %s\n", Server);
return(4);
}
}
if ((rc = GetBinderyObjectID(USER, User, &UsID)) != 0) {
fprintf(stdout, "Пользователя %s нет на сервере!\n", User);
return(3);
}
rc = GetObjectConnectionNumbers(USER, User, &Ncon, ConLst);
if (rc == 0) {
if (Ncon) {
fprintf(stdout, "Пользователь %s подключен!\n", User);
return(0);
}
else {
fprintf(stdout, "Пользователь %s НЕ подключен!\n", User);
return(2);
}
}
else
return(rc);
}
/* +--------------- Конец файла USER.C -----------------+ */