【问题标题】:Does a large buffer with Socket.Receive increase the risk of a WSAENOBUFS SocketError?Socket.Receive 的大缓冲区是否会增加 WSAENOBUFS SocketError 的风险?
【发布时间】:2012-09-16 16:54:42
【问题描述】:

我们收到操作系统无法分配更多 TCP 缓冲区的错误 (SocketError=WSAENOBUFS)。这基本上是因为机器内存不足。

但我想知道是否可以通过使用非常大的缓冲区调用 Socket.Receive 来使这种情况变得更糟。当我们提供大缓冲区时,Windows 是否需要分配更多 TCP 缓冲区?

【问题讨论】:

  • 当您说“非常大的缓冲区”时,您指的是多少?千字节?几十KB?数百?兆字节?另外,您传输的数据的性质是什么?
  • 二进制数据,大约100-200Mb。通常我们会收到相当小的消息(

标签: c# windows sockets network-programming


【解决方案1】:

如果您提供大缓冲区,则提供。 Windows 不必分配它:你做了。指定大于套接字接收缓冲区本身的缓冲区没有多大意义,因为它永远不会被填充。

【讨论】:

  • 好吧,这就是我的预期,只是我不确定,因为提到的套接字错误恰好出现在读取这么大消息的位置。由于接收缓冲区不是用户内存的一部分,用户端的内存压力不应导致这些接收缓冲区的分配失败。很明显,指定一个大于套接字接收缓冲区的缓冲区是没有用的,但与此同时,如果最终有兴趣填充整个缓冲区,则编码会稍微少一些。感谢您的回答!
猜你喜欢
  • 2019-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多