Чтение полей SIO_KEEPALIVE_VALS в сокете Windows (для времени ожидания активности и интервалов)

Учитывая сокет Windows, я хочу определить, какие значения он использует для простоя активности активности TCP и времени интервала активности TCP (примерно эквивалентно TCP_KEEPIDLE а также TCP_KEEPINTVL настройки на розетках Беркли).

Я вижу, что вы можете установить эти значения с помощью WSAIoctl позвонить (см. http://msdn.microsoft.com/en-us/library/windows/desktop/dd877220%28v=vs.85%29.aspx ). Тем не менее, похоже, что нет никакого API для чтения их текущих значений. Я пробовал звонить WSAIoctl с заполненным выходным параметром, но NULL входной параметр, например:

DWORD bytes_returned;
struct tcp_keepalive keepalive_opts;
int rv = WSAIoctl(socket, SIO_KEEPALIVE_VALS, NULL, 0, &keepalive_opts, sizeof(keepalive_opts), &bytes_returned, NULL, NULL);

Но это возвращает меня WSAEFAULT («Система обнаружила неверный адрес указателя при попытке использовать аргумент указателя в вызове.»).

Я мог позвонить WSAIoctl как с входным, так и с выходным параметром, но я не хочу устанавливать значения, я просто хочу их прочитать. И, насколько я могу судить, предоставляя любыеNULL входной параметр приведет к тому, что параметры будут установлены на те значения, которые окажутся в этом пространстве памяти (определяется struct tcp_keepalive; снова увидеть http://msdn.microsoft.com/en-us/library/windows/desktop/dd877220%28v=vs.85%29.aspx ).

Вышеприведенное также подчеркивает еще одну проблему, заключающуюся в незнании текущих значений: я не могу установить только одно из времени простоя активности активности или интервала времени сохранения активности — я должен удалить оба (неизвестных) значения одновременно, так как они оба члена структуры я должен предоставить.

Я знаю, что могу предположить, какие значения установлены на основе документации Windows, но я бы предпочел не предполагать. я вижу это http://technet.microsoft.com/en-us/library/bb726981.aspx#EDAA определяет KeepAliveInterval а также KeepAliveTime значения по умолчанию. Однако папка Parameters в моем реестре Windows 7 не содержит ни одного из этих ключей, поэтому я действительно должен полагаться на то, что документация здесь на 100% правильная (чтобы знать значения по умолчанию, которые получит сокет), что намного хуже, чем программно их извлечение (даже извлечение их из реестра может быть в порядке, но вышеприведенный опыт показывает, что я не могу).

Есть ли способ получить текущее время простоя активности активности TCP и значения интервала времени активности активности TCP для сокета Windows?

3

Решение

В отличие от TCP_KEEPIDLE а также TCP_KEEPINTVL, который может быть использован с getsockopt()нет возможности прочитать текущую SIO_KEEPALIVE_VALS значения для сокета, только для их установки.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]