首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >套接字KeepAlive单元

套接字KeepAlive单元
EN

Stack Overflow用户
提问于 2013-07-30 22:00:57
回答 1查看 1.1K关注 0票数 2

基于这里的一些帖子,我编写了以下设置套接字KeepAlive的简单方法,而且它似乎是有效的。在我拔出以太网电缆断开两个服务之间的连接后,我的网络库可以处理在SocketAsyncEventArgs完成事件上传输的0字节,并触发一个断开连接的事件。

但出于某种原因,我需要使用百分之一秒而不是毫秒。我所能找到的所有文档似乎都表明我应该使用毫秒。

(编辑)我现在已经验证了返回的字节是否与其他两个方法匹配:

http://www.codeproject.com/Articles/117557/Set-Keep-Alive-Values

http://social.msdn.microsoft.com/Forums/en-US/35dfb50e-1e14-40c1-af01-f359be4d6a02/how-to-set-socket-keep-alive-timeinterval-values

(编辑)我也有WireSharked这一点,并且可以验证当间隔设置为500时,KeepAlives每5秒就会熄灭一次。

什么给予?在最新版本的.NET中有什么东西坏了吗?

代码语言:javascript
复制
private static byte[] GetKeepAliveOption(bool isEnabled, int keepAliveTime, int keepAliveInterval)
{
    //time and interval are in hundredths of a second to work properly
    //12 keepalive bytes, 1st 4 for enabled, next 4 for time, next 4 for interval
    byte[] bytes = new byte[12];

    if (isEnabled)
    {
        bytes[0] = 1;
    }

    byte[] keepAliveTimeBytes = BitConverter.GetBytes(KeepAliveTime);
    Buffer.BlockCopy(keepAliveTimeBytes, 0, bytes, 4, 4);

    byte[] keepAliveIntervalBytes = BitConverter.GetBytes(KeepAliveInterval);
    Buffer.BlockCopy(keepAliveIntervalBytes, 0, bytes, 8, 4);

    return bytes;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-18 14:46:01

在评论中回答了我自己的问题。对不起,这是我的第一篇帖子,我应该在这样的回答中这样做。

这样做的基础是理解参数:

  • KeepAliveTime是发送KeepAlive消息之间的间隔。
  • KeepAliveInterval是在初始KeepAlive消息未加标记时发送重传探测之间的间隔。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17958232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档