Форум : Программное обеспечение

Название : Hydralink.dll и разрыв сети

 Sashka :

2.8.12 18:31
 Добрый!
hydralink.dll 2010.2.0.2
Читаем архив по TCP/IP
...
connect.commdev := HL_CONNTYPE_TCP;
connect.netno := 255;
connect.baud := 9600;
connect.ip := $C0A8FE46;
connect.tcpport := 5000;
req.cmask := HL_CONTOUR_1 or HL_CONTOUR_2 or HL_CONTOUR_3;
req.infokind := HL_INFOKIND_RECORD;
req.pfunc := nil;
bErr := HLINK_Read(@connect, @req,ReadRes,-35);
...
Если в момент начала работы HLINK_Read (причем не сразу) отключить преобразователь интерфейса Ethernet-RS-232 из сети, т.е. изобразить разрыв сети, то выход из функции HLINK_Read вообще не происходит (или занимает более 40 минут)
При этом если разорвать соединение почти сразу после вызова HLINK_Read, то секунд через 10 произойдет выход из функции с ошибкой "Не возможно прочитать арх запись" или "Не могу переключить системы".

P.S. если сеть не рвать - все успешно считывается.

 CH :

2.8.12 19:08
 Добрый, добрый...

Так, а в чём вопрос? Попробую догадаться: "почему так происходит?". Использованы блокирующиеся сокеты (кроме начального установления соединения). Через какой промежуток времени после обрыва произойдёт выход из вызванной сетевой функции известно только операционной системе.

 Sashka :

3.8.12 08:52
 ))) так писал - так писал, что даже про вопрос то и забыл.

Вопрос:
Как рекомендуете обрабатывать ситуацию обрыва сети в приложении, чтобы оно не висело Hlink_read, раз в библиотеке реализованы блокирующие сокеты без таймаута?

 CH :

3.8.12 12:53
 Затрудняюсь дать красивую рекомендацию. Ситуация по сути неразрешимая. Проще всего, как мне кажется, переписать библиотеку на неблокирующиеся сокеты - пара часов времени + тестирование. Только сейчас я ухожу в отпуск до сентября...

 Sashka :

3.8.12 13:06
 Ну тогда хорошо отдохнуть
И ждем обновления библиотеки

PS. А вообщем можно просто добавить таймаут в блокирующем чтении. Чтобы не переписывать полностью.

© NegaSoft co., 2005
http://www.teplovizor.ru

URL этой темы
http://www.teplovizor.ru/forum/viewtopic.php?topic_id=242&forum=2