【发布时间】:2013-10-12 16:22:14
【问题描述】:
WinSock 的 MS 文档说您无法获得为套接字设置的超时时间:
下表列出了代表 BSD 的 optname 的值 getsockopt 函数不支持的套接字选项。
...
SO_RCVTIMEO int 接收超时。 ...
但我注意到可爱的 .Net 有这个选项:
那么有一些丑陋的方法可以在本机代码中获取它。 ?
【问题讨论】:
WinSock 的 MS 文档说您无法获得为套接字设置的超时时间:
下表列出了代表 BSD 的 optname 的值 getsockopt 函数不支持的套接字选项。
...
SO_RCVTIMEO int 接收超时。 ...
但我注意到可爱的 .Net 有这个选项:
那么有一些丑陋的方法可以在本机代码中获取它。 ?
【问题讨论】:
.NET 设计并非基于 Windows 实施限制。这里没有魔法,无论如何尝试使用它只会抛出一个 SocketException,“在 getsockopt 或 setsockopt 调用中指定了未知、无效或不受支持的选项或级别”。直接来自 Windows 的消息,WSAENOPROTOOPT winapi 错误代码。但当您的程序在支持该选项的 Linux、Apple 或移动操作系统上运行时不会。
所以不,它具有选项这一事实并不能保证它会起作用。
【讨论】:
我发现的第一个MSDN documentation 说它支持。二十年前我在 Windows 中使用它。您的第一个(未引用的)来源存在严重问题。
【讨论】: