Форум: "Сети";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
ВнизRasDial Найти похожие ветки
← →
aus (2004-12-10 14:42) [0]Использую для подключения удаленного доступа ф-цию RasDial из Rasapi32.dll.
Подключается нормально, если телефонная линия работает без перебоев, но бывает, что модем не определяет, что линия занята, тогда через некоторое время модем отключается, но подключение остается активным, ф-ция HangUp не отключает его, при повторном вызове RasDial выдается ошибка, что подключение уже используется.
Кто сталкивался с такой проблемой, прошу посоветовать, как отследить состояние подключения и отключить его в таком случае.
← →
Piter © (2004-12-10 18:20) [1]DWORD RasDial(
LPRASDIALEXTENSIONS lpRasDialExtensions, // pointer to function extensions data
LPTSTR lpszPhonebook, // pointer to full path and filename of phone-book file
LPRASDIALPARAMS lpRasDialParams, // pointer to calling parameters data
DWORD dwNotifierType, // specifies type of RasDial event handler
LPVOID lpvNotifier, // specifies a handler for RasDial events
LPHRASCONN lphRasConn // pointer to variable to receive connection handle
);
...
lpvNotifier
Specifies a window handle or a RasDialFunc, RasDialFunc1, or RasDialFunc2 callback function to receive RasDial event notifications
Тебе при слете по таймауту разве не приходит соответствующее уведомление?
← →
aus (2004-12-10 19:21) [2]Если приходит уведомление, то что делать дальше, HangUp не помогает, т.к. соединение вроде не установлено.
← →
Piter © (2004-12-11 02:29) [3]А что показывает RasEnumConnections - есть соединения?
← →
aus (2004-12-11 12:52) [4]Покаывает, что есть.
← →
aus (2004-12-11 12:55) [5]Кроме HangUp какая еще функция может разорвать соединение на стадии подключения. Номеронабиратель (и IE) при нажатии на "отменить" прерывает даже набор номера, как это реализовать?
← →
Piter © (2004-12-11 15:46) [6]aus (11.12.04 12:55) [5]
Выложи сюда свое описание функции HangUp
← →
aus (2004-12-11 16:24) [7]У меня, к сожалению, нет сейчас исходника, он на работе.
Описание ф-ции соответствует helpу по TAPI.
Но принцип такой:
в переменную получаю ненулевой handl активного соединения, используя RasEnumConnections, потом в вызываю HangUp с параметром этой переменной. Если подключение проходит нормально, то и отключается нормально, при занятой (и не понятой модемом) линии - я описал выше.
Пробовал сохранять handl в глобальной переменной при подключении RasDial, результат тот же.
И не отключить это соединение вплоть до закрытия приложения, да и при закрытии не всегда отключается, другое подключеение ( RasEntry с другим именем) выполняется, а это так и висит.
А что по поводу [5]?
← →
Piter © (2004-12-11 17:04) [8]aus (11.12.04 16:24) [7]
У меня, к сожалению, нет сейчас исходника, он на работе.
придешь на работу - покажи исходник
RasHangUp:
If the function fails, the return value is a nonzero error value listed in the RAS header file, or ERROR_INVALID_HANDLE
так что возвращает RasHangUp?
И ты примечание читал:
An application should not call RasHangUp and then immediately exit. The connection state machine needs time to properly terminate. If the system prematurely terminates the state machine, the state machine may fail to properly close a port, leaving the port in an inconsistent state. A simple way to avoid this problem is to call Sleep(3000) after returning from RasHangUp; after that pause, the application can exit. A more responsive way to avoid the problem is, after returning from RasHangUp, to call RasGetConnectStatus(hrasconn) and Sleep(0) in a loop until RasGetConnectStatus returns ERROR_INVALID_HANDL
?
← →
aus (2004-12-11 17:13) [9]Ну вот и разобрались )))
Благодарю, и чего это я сам не прочитал раньше?
Скорее бы на работу!
← →
Piter © (2004-12-11 18:46) [10]aus (11.12.04 17:13) [9]
Ну вот и разобрались )))
ва чем? Ты примечание прочитал? А с чего ты так уверен, что оно тебе поможет?
Если ты нормально экспериментировал - не в этом дело? Или в этом?
← →
ECM © (2004-12-13 17:12) [11]2 Piter & aus
У меня такая проблема осталась (на W2K) - пробовал и Sleep(>=3000) и RasGetConnectStatus(hrasconn) and Sleep(0) in a loop until RasGetConnectStatus returns ERROR_INVALID_HANDL
... правда давно это было... так и осталась ...кажется
2 aus - совет: после исправления протестируй тщательнее...
← →
aus (2004-12-13 18:21) [12]Конечно протестирую, иначе в работу как пускать, он у меня ночью будет подключаться, без чьего-то участия.
Другой вариант: использовать RasDialDlg, только нужно чтобы он автоматически начинал набирать, попробую.
← →
aus (2004-12-13 18:23) [13]Вот что интересно: если RasDial завершается описанной мной ситуацией, то RasDialDlg сразу начинает набор, без начального диалога. Странно...
← →
aus (2004-12-15 14:16) [14]Если кому интересно, то дело обстоит так:
вызывая RasDial с параметром, который определяет тип Callback-функции, равным 0, handle подключения можно получить только после выполнения подключения. Т.к. подключение не выполнено (ошибка вызвана плохой телефонной линией), то и handl его не получен. Следовательно RasHangUp(handle) ничего не отключает.
Если тип Callback-функции равен 1, то в функцию обработки событий (RasDialFunct1) передается handl подключения при первом же событии. Его можно спокойно передать в RasHangUp и отключить в любое (или почти в любое) время, в том числе и на стадии набора номера.
← →
radja (2005-01-28 14:19) [15]Вообще говоря, прервать связь во время набора номера или при ожидании подключения из callback функции довольно сложно. Она вызывается всего три раза до этапа набора номера и один после подключения. Лучше из нее сохранять handl подключения в глобальную переменную и в кнопке "Отмена" в своей программе использовать для разрыва связи именно эту переменную.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.044 c