Тестирую обмен модбаспулом и вот, что обнаружилось.
Конект есть, обмен идет. Если отключить кабель сети (приблизительно) на пару секунд модбаспул дает ошибки таймаута (как и положено), подтыкаем кабель обратно и связь восстанавливается, при этом на СПК все проходит без ошибок, то есть SysSockRecv в pResult возвращает 0. Но если кабель отключить на дольшее время модбаспул начинает выдавать (как и всегда)writeerror или readerror, а программа на СПК просто виснет.
Пробовал читать и писать с флагом SOCKET_MSG_DONTWAIT, SysSockRecv каждый раз в pResult возвращает: "ERR_SOCK_WOULDBLOCK 16#206 Socket is in nonblocking mode but THIS call would block", игнорирую эту ошибку - обмен идет. Отключаем кабель на пару секунд - все как и с чтением без флагов (diFlags := 0 ). Отключаем кабель дольше чем на пару секунд - СПК больше не виснет, но SysSockRecv в pResult других ошибок не возвращает, поэтому при присоединении кабеля связь восстанавливается путем новых подключений. Создаются новые клиентские сокеты, а старые не закрываются, так как о разрыве связи так ничего и не узнали.




Ответить с цитированием