阻塞套接字的10035错误

3

有人知道在使用带有超时的阻塞套接字读取数据时,什么会导致10035错误(EWOULDBLOCK)吗?这是在Windows XP上使用.NET框架版本3.5套接字库。我自己从未遇到过这种情况, 但我的一个同事总是遇到这个问题。他向一个速度较慢的设备发送了相当大量的数据,然后等待响应,通常会出现10035错误。我想知道TCP缓冲区是否有问题,但如果是这种情况,我会期望读取操作等待或超时。套接字绝对是阻塞的,而不是非阻塞的。

3个回答

1

+1 提交错误报告。谢谢!我已经修复了:http://github.com/mono/mono/commit/5df31fb7877cdda9dbe160e7857dafe9428a5216 - Gonzalo

1
似乎发生的情况是在读取超时后重试时出现了错误。超时(10060)后,我重新发送数据并等待回复。超时似乎将套接字设置为非阻塞模式,尽管调试器显示 .Net 套接字对象上的 Blocking 设置为 true,但我立即收到 10035 错误。如果在重试之前显式将套接字的 Blocking 设置为 true,则 10035 错误消失了。这看起来像是 Winsock 或 .Net 中的一个错误,或可能是一个特性。

0

谢谢David - 我看到了那个,但我并不完全相信它是导致我的问题的原因。我已经尝试通过在两台Windows机器之间发送大量数据来淹没缓冲区,但发生的一切都是发送被阻塞或超时,从未出现10035错误。此外,该错误发生在应该是相当少量数据的TCP读取上。我认为现在是释放Wireshark的时候了。 - Andrew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接