【问题标题】:Get a socket timeout value on windows在 Windows 上获取套接字超时值
【发布时间】:2013-10-12 16:22:14
【问题描述】:

WinSock 的 MS 文档说您无法获得为套接字设置的超时时间:

下表列出了代表 BSD 的 optname 的值 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

那么有一些丑陋的方法可以在本机代码中获取它。 ?

【问题讨论】:

    标签: c++ sockets winsock


    【解决方案1】:

    .NET 设计并非基于 Windows 实施限制。这里没有魔法,无论如何尝试使用它只会抛出一个 SocketException,“在 getsockopt 或 setsockopt 调用中指定了未知、无效或不受支持的选项或级别”。直接来自 Windows 的消息,WSAENOPROTOOPT winapi 错误代码。但当您的程序在支持该选项的 Linux、Apple 或移动操作系统上运行时不会。

    所以不,它具有选项这一事实并不能保证它会起作用。

    【讨论】:

    • 好的,但是为什么 ms ppl 不将其存储在套接字对象中(ctor 将其设置为默认值,更新更新其值)。并不是有人会关心套接字大小增加 1 个 int。
    【解决方案2】:

    我发现的第一个MSDN documentation 说它支持。二十年前我在 Windows 中使用它。您的第一个(未引用的)来源存在严重问题。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-18
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 2014-07-18
    • 2018-06-05
    相关资源
    最近更新 更多