Как при работе с сетевыми сокетами в NodeJS получить информацию о неудачной доставке TCP-пакета?
В модуле net есть socket.write(data[, encoding][, callback]).
Колбек вызывает сразу при записи в сокет.
А есть ли возможность повесить колбек на успешную доставку? Иначе ведь приходится городить поверх TCP в прикладном протоколе контроль доставки.
Вебсокеты прошу не предлагать, поскольку взаимодействуем с ПО микроконтроллеров, в котором поддержка вебсокета не реализована на данный момент (да и оправдана ли?)
Смотрел в ошибки - вроде бы все только по сокету: ресет, таймаут...
Нет, не происходит этого события. Например, отправляем пакет из ноды на устройство, а в ответ ничего.
По тисипдампу только видны повторы. А потом срабатывает таймут неактивности сокета.
Проблема в том, что когда срабатывает таймаут неактивности, я не могу понять - просто устройство перестало отвечать на прикладном уровне, но последний мой пакет к нему оно поймало. Или заглохло всё на уровни сети и последний пакет не добрался? Или ACK на него...
Вернее, я ввожу в заблуждение. Конечно событие error должно появится. С кодом ошибки: ETIMEDOUT.
Но я не обнаружил, как настраивается этот таймаут. Системно? В результате таймаут неактивности (событие timeout у сокета) у меня срабатывает раньше, поскольку таймаут короткий. Видимо, дело в этом...
Да, но главное, чтобы таймаут ошибки был меньше таймаута неактивности. А сейчас наоборот, из-за того, что я не нашел как в ноде устаналивать таймаут, по которому создатся ошибка ETIMEDOUT.
Спасибо, пакет интересный - посмотрю исходники, но использовать - сомнительно. У нас же не net используется, а tls. Поэтому самому городить SSL поверх raw-socket... не хочется.
Павел Китьян: мда, тут проблемка вышла, тот таймаут можно для блокирующего соединения делать,а тут оно не блокирующее.....Даже написав свою либу-хелпер и установив таймаут для NET это не поможет.