Документация MS для WinSock говорит, что вы не можете получить таймаут, который вы установили для сокета:
В следующей таблице перечислены значения для optname, которые представляют опции сокета BSD, которые не поддерживаются функцией getsockopt.
...
SO_RCVTIMEO int Получает тайм-аут....
но я заметил, что у прекрасного.Net есть такой вариант:
Так что есть какой-то уродливый способ получить его в собственном коде. ?
Конструкция.NET не основана на ограничениях реализации Windows. Там нет никакой магии, пытаясь использовать ее, так или иначе, просто выбросит SocketException: "Неизвестный, недопустимый или неподдерживаемый параметр или уровень был указан в вызове getsockopt или setsockopt". Сообщение, которое приходит прямо из Windows, код ошибки winapi WSAENOPROTOOPT. Но не будет, когда ваша программа будет работать в Linux, Apple или мобильной операционной системе, которая поддерживает этот вариант.
Так что нет, тот факт, что у него есть опция, не обещает, что это сработает.
Первая документация MSDN, которую я нашел, говорит, что она поддерживается. Я использовал его в Windows двадцать лет назад. Что-то серьезно не соответствует вашему первому (без записи) источнику.