Как установить опцию keepalive для отдельного сокета в VxWorks - PullRequest
1 голос
/ 10 декабря 2010

Есть ли способ установить keepalive для отдельного дескриптора сокета в vxworks? Я читал в некоторых документах, что опция «SOL_TCP» в функции setsockopt будет делать такие преимущества в Linux. Есть ли такая возможность в VxWorks? Если да, пожалуйста, предоставьте соответствующую информацию, касающуюся того же самого, например, что это за файл включения, который мы должны включить, и как использовать такую ​​опцию и т. Д.

1 Ответ

1 голос
/ 07 января 2011

Из руководства VxWorks "Library Reference" (можно скачать):

ВАРИАНТЫ ДЛЯ ПОТОКОВЫХ ГНЕЗДОВ

В следующих разделах обсуждаются параметры сокетов, доступные для потоковых (TCP) сокетов.

SO_KEEPALIVE - Обнаружение разорванного соединения

Укажите параметр SO_KEEPALIVE, чтобы транспортный протокол (TCP) инициировал таймер для обнаружения разорванного соединения:

 setsockopt (sock, SOL_SOCKET, SO_KEEPALIVE, &optval, sizeof (optval));

Это предотвращает зависание приложения на неверном соединении. Значение в optval для этой опции является целым числом (тип int), либо 1 (включено), либо 0 (выключено). Целостность соединения проверяется путем передачи сегментов TCP нулевой длины, запускаемых таймером, чтобы вызвать ответ от однорангового узла. Если одноранговый узел не отвечает после повторной передачи сегментов KEEPALIVE , соединение сбрасывается, все структуры данных протокола восстанавливаются, а процессы, спящие на соединении, пробуждаются с ошибкой ETIMEDOUT .

Тайм-аут ETIMEDOUT может происходить двумя способами. Если соединение еще не установлено, таймер KEEPALIVE истекает после простоя для TCPTV_KEEP_INIT . Если соединение установлено, таймер KEEPALIVE запускается при отсутствии трафика для TCPTV_KEEP_IDLE . Если ответ от узла не получен после отправки KEEPALIVE сегмента TCPTV_KEEPCNT раз с интервалом TCPTV_KEEPINTVL , TCP предполагает, что соединение недопустимо. Параметры TCPTV_KEEP_INIT , TCPTV_KEEP_IDLE , TCPTV_KEEPCNT и TCPTV_KEEPINTVL определены в файле target / h / net / tcp_timer.h.

...