В целом всё работает, но есть проблема. Для тестов NPort подключен напрямую к компьютеру по Ethernet, на 485 выходе находится прибор, работающий по протоколу Modbus (всё собрано на столе). Если я буду обращаться к прибору не через NPort, а через адаптер 485-интерфейса, то при посылке на него данных, получу 100% ответов. При обращении к прибору через NPort от 10 до 15% посылок теряется.
Если посмотреть через веб-сервер МОХА статистику, то видно, что в такой момент на NPort пришло нужное кол-во байт, но в ответе оказалось 0 байт. То есть прибор отвечал, но NPort передавать ничего не стал, хотя FIFO-буфер по идее должен был сохранить и передать данные позже. За основу клиента взят пример с MSDN Complete Winsock Client Code, но в чистом виде он не работает, команду shutdown я не использую, потому что тогда сокет при последующем recv закроет соединение. Также со стороны приложения-клиента видно, что в момент пропажи ответа сокет занят, приходится выходить по таймауту select’а.
При обращении к NPort, находящемся на объекте, потеря одиночных запрос-ответ составляет уже 30-35%. Отсюда мне непонятно, как работает и чем занимается TCP Server между приёмом и передачей. Вы можете предоставить какой-то алгоритм, или программный пример клиента для работы с сервером?