【问题标题】:Socket Shutdown Close Errors套接字关闭关闭错误
【发布时间】:2013-11-21 22:20:45
【问题描述】:

所以我试图关闭一个套接字而不将其关闭到另一侧以供阅读。

我的结束代码是

    objClientSocket.Shutdown(SocketShutdown.Both);
    objClientSocket.Close(120);

问题在于正在执行的应用程序

    objClientSocket.Receive(buffer);

收到连接已被强制关闭的错误。如果我在 .Shutdown() 之前放置一个断点并让我的应用程序在接收端运行,那很好。我认为 .Shutdown() 方法在关闭之前等待套接字被读取并清空?我猜错了吗?

在此之后,我取出 .Shutdown() 和 .Close() 导致相同的错误。(并不惊讶,但我认为我会解决它。)

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • ' 我以为 .Shutdown() 方法在关闭之前等待套接字被读取并清空?':不,它只是将要发送的 FIN 排入队列,并且 FIN 应该导致接收器以获取流结束条件。重置可能是由关闭超时引起的。我会摆脱它。

标签: c# sockets shutdown


【解决方案1】:

我预计问题可能是下游端已决定要接收实际上从未发送过的数据。自从我处理细节以来已经有一段时间了,但是套接字 API 提供了一些方法(我认为一个是“选择”),可以用来等到套接字上发生“某事”;一旦套接字表明发生了某事,就可以查看有多少数据可用(如果有),然后对其进行处理。

【讨论】:

  • 谢谢,我会试试看!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 2014-08-28
  • 2013-09-22
相关资源
最近更新 更多