首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C#中进行非阻塞套接字调用以确定连接状态?

如何在C#中进行非阻塞套接字调用以确定连接状态?
EN

Stack Overflow用户
提问于 2009-09-01 17:34:41
回答 3查看 7.9K关注 0票数 6

套接字上已连接属性的MSDN文档如下:

连接属性的值反映了最近操作时连接的状态。如果需要确定连接的当前状态,则进行非阻塞的零字节发送调用。如果调用成功返回或抛出WAEWOULDBLOCK错误代码(10035),则套接字仍然连接;否则,套接字不再连接。

我需要确定连接的当前状态--如何进行非阻塞的零字节发送调用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-01 17:47:19

Socket.Connected属性(至少是.NET 3.5版本)的MSDN文档底部的示例说明了如何这样做:

代码语言:javascript
复制
// .Connect throws an exception if unsuccessful
client.Connect(anEndPoint);

// This is how you can determine whether a socket is still connected.
bool blockingState = client.Blocking;
try
{
    byte [] tmp = new byte[1];

    client.Blocking = false;
    client.Send(tmp, 0, 0);
    Console.WriteLine("Connected!");
}
catch (SocketException e) 
{
    // 10035 == WSAEWOULDBLOCK
    if (e.NativeErrorCode.Equals(10035))
        Console.WriteLine("Still Connected, but the Send would block");
    else
    {
        Console.WriteLine("Disconnected: error code {0}!", e.NativeErrorCode);
    }
}
finally
{
    client.Blocking = blockingState;
}

 Console.WriteLine("Connected: {0}", client.Connected);
票数 8
EN

Stack Overflow用户

发布于 2009-09-01 17:42:08

Socket.BeginSend

票数 3
EN

Stack Overflow用户

发布于 2013-02-18 15:16:33

只是提供基于经验的附加信息:Socket.Connect文档页面3.5和4版本底部的注释描述了我的经验--这个例子根本行不通。真希望我知道为什么它对某些人有效,而不是对另一些人。

作为一种解决方案,尽管文档中写着什么,我还是将示例更改为实际发送没有标志的1字节。这成功地更新了已连接属性的状态,并相当于在间隔内发送保持活动的数据包。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1363682

复制
相关文章

相似问题

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