Получить значение времени ожидания сокета в Windows

0

Документация MS для WinSock говорит, что вы не можете получить таймаут, который вы установили для сокета:

В следующей таблице перечислены значения для optname, которые представляют опции сокета BSD, которые не поддерживаются функцией getsockopt.
...
SO_RCVTIMEO int Получает тайм-аут....

но я заметил, что у прекрасного.Net есть такой вариант:

http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.receivetimeout.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

Так что есть какой-то уродливый способ получить его в собственном коде. ?

Теги:
sockets
winsock

2 ответа

2
Лучший ответ

Конструкция.NET не основана на ограничениях реализации Windows. Там нет никакой магии, пытаясь использовать ее, так или иначе, просто выбросит SocketException: "Неизвестный, недопустимый или неподдерживаемый параметр или уровень был указан в вызове getsockopt или setsockopt". Сообщение, которое приходит прямо из Windows, код ошибки winapi WSAENOPROTOOPT. Но не будет, когда ваша программа будет работать в Linux, Apple или мобильной операционной системе, которая поддерживает этот вариант.

Так что нет, тот факт, что у него есть опция, не обещает, что это сработает.

  • 0
    хорошо, но почему, черт возьми, ppl не сохраняет это в объекте сокета (ctor устанавливает его в значение по умолчанию, обновления обновляют его значение). Никто не будет заботиться о том, что размер сокета увеличивается на одно целое.
-1

Первая документация MSDN, которую я нашел, говорит, что она поддерживается. Я использовал его в Windows двадцать лет назад. Что-то серьезно не соответствует вашему первому (без записи) источнику.

  • 0
    msdn.microsoft.com/en-us/library/windows/desktop/...
  • 0
    @ NoSenseEtAl Я знаю, что MSDN противоречит самому себе и другим. Мое второе предложение разрывает связь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню